assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的
assertEqual(a, b, [msg='测试失败时打印的信息']) # a == b 断言a和b是否相等,相等则测试用例通过 assertNotEqual(a,b,[msg='测试失败时打印的信息']) # a != b 断言a和b是否相等,不相等则测试用例通过 assertTrue(x,[msg='测试失败时打印的信息']) # x is True 断言x是否True,是True则测试用例通过 assertFalse(x,[msg='测试失败时打印的信息']) # x is False 断言x是否False,是False则测试用例通过 assertIn(a,b,[msg='测试失败时打印的信息']) # a in b 断言a是否在b中,在b中则测试用例通过 assertNotIn(a,b,[msg='测试失败时打印的信息']) # a not in b 断言a是否在b中,不在b中则测试用例通过 assertIsNone(x,[msg='测试失败时打印的信息']) # x is None 断言x是否None,是None则测试用例通过 assertIsNotNone(x,[msg='测试失败时打印的信息']) # x not is None 断言x是否None,不是None则测试用例通过 assertIs(a,b,[msg='测试失败时打印的信息']) # a is b 断言a是否是b,是则测试用例通过 assertNotIs(a,b,[msg='测试失败时打印的信息']) # a not is b 断言a是否是b,不是则测试用例通过 assertIsInstance(a,b,[msg='测试失败时打印的信息']) # 断言a是是b的一个实例,是则测试用例通过 assertNotIsInstance(a,b,[msg='测试失败时打印的信息']) # 断言a是是b的一个实例,不是则测试用例通过
示例:
#导入unittest模块 import unittest class Login(unittest.TestCase): def setUp(self): u'''没有前置条件可以写pass''' print("开始执行") # pass def test01(self): #测试用例必须以test开头 print("执行测试用例01") result = '1' self.assertTrue(result) #断言result是不是True def test02(self):#判断两个参数是否相等 print("执行测试用例02") result1 = '1' result2 = '1' self.assertEqual(result1,result2,msg="%s不等于%s"%(result1,result2)) def test03(self):#判断两个参数是否不相等 print("执行测试用例03") result1 = '1' result2 = '2' self.assertNotEqual(result1,result2,msg="%s等于%s"%(result1,result2)) def test04(self):#判断一个参数是否包含另一个参数 print("执行测试用例04") result1 = '1' result2 = '21' self.assertIn(result1,result2,msg="%s不包含%s"%(result2,result1)) def test05(self):#判断一个参数是否不包含另一个参数 print("执行测试用例05") result1 = '1' result2 = '2' self.assertNotIn(result1,result2,msg="%s包含%s"%(result2,result1)) def test06(self): #测试一个参数是否为真 print("执行测试用例06") result = '1' self.assertTrue(result,msg="%s不是True"%result) def test07(self):#判断一个参数是否不包含另一个参数 print("执行测试用例07") result = '' self.assertFalse(result,msg="%s不是False"%(result)) def test08(self):#判断一个参数是否不包含另一个参数 print("执行测试用例08") result = None self.assertIsNone(result,msg="%s不是None"%(result)) def test09(self):#判断一个参数是否不包含另一个参数 print("执行测试用例09") result = '123' self.assertIsNotNone(result,msg="%s是None"%(result)) def tearDown(self): u'''没有后置条件可以写pass''' print("结束...") # pass if __name__ == '__main__': unittest.main()
检查点
assertEqual、assertNotEqual
assertEqual(actv,expv,"如果断言失败提示信息")
self.assertEqual(self.driver.find_element_by_id('com.boohee.secret:id/tv_title').text,u'超模25','切到超模25tab失败')
assertTrue、assertFalse
assertTrue:判断bool值为True,则pass
assertFalse:判断bool值为False,则Pass
self.assertTrue(表达式或值,“失败提示信息”)
self.assertTrue(self.find_element_by_id('com.boohee.secret:id/btn_login').is_enabled(),'未输密码登录按钮为不可点状态,Fail')
assertIsNotNone、assertIsNone
assertIsNone:不存在,则pass
assertIsNotNone:存在,则pass
self.assertIsNotNone(self.driver.find_element_by_id('com.boohee.secret:id/tv_edit_profile'),'无编辑资料按钮,登录失败,Fail')
断言assertion:
验证应用程序的状态是否同所期望的一致。
常见的断言包括:验证页面内容,如标题是否为X或当前位置是否正确,或是验证该复选框是否被勾选。
selenium 提供了三种模式的断言:assert 、verify、waitfor
Assert 失败时,该测试将终止。
Verify 失败时,该测试将继续执行,并将错误记入日显示屏 。也就是说允许此单个 验证通过。确保应用程序在正确的页面上
Waitfor 用于等待某些条件变为真。可用于 AJAX 应用程序的测试。
如果该条件为真,他们将立即成功执行。如果该条件不为真,则将失败并暂停测试。直到超过当前所设定的超过时间。一般跟setTimeout时间一起使用
断言常用的有:
assertLocation(判断当前是在正确的页面)、
assertTitle(检查当前页面的 title 是否正确)、
assertValue(检查 input 的值, checkbox 或 radio,有值为”on”无为”off”)、
assertSelected(检查 select 的下拉菜单中选中是否正确)、
assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
assertText(检查指定元素的文本)、
assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
assertAttribute(检查当前指定元素的属性的值)、
assertTable(检查 table 里的某个 cell 中的值)、
assertEditable(检查指定的 input 是否可以编辑)、
assertNotEditable(检查指定的 input 是否不可以编辑)、
assertAlert(检查是否有产生带指定 message 的 alert 对话框)、
verifyTitle (检查预期的页面标题)
verifyTextPresent (验证预期的文本是否在页面上的某个位置)
verifyElementPresent(验证预期的UI元素,它的HTML标签的定义,是否在当前网页上)
verifyText(核实预期的文本和相应的HTML标签是否都存在于页面上)
verifyTable(验证表的预期内容)
waitForPageToLoad(暂停执行,直到预期的新的页面加载)
waitForElementPresent (等待检验某元素的存在。为真时,则执行。)
验证和断言的区别:验证失败后不影响脚本的继续执行,断言失败后将停止脚本的执行。
异常类型
AssertionError:assert语句失败
AttributeError:试图访问一个对象没有的属性
IOError:输入输出异常,基本是无法打开文件
ImportError:无法引入模块或者包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问字典里不存在的键
KeyboadrInterrupt:Ctrl+c被按下
NameError:使用一个还未赋值对象的变量
SyntaxError:python代码逻辑语法错误,不能执行
TypeError:传入的对象类型与要求不符
UnboundLocalError:试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问
ValueError:传入一个不被期望的值,即使类型正确
例子如下python2.7+selenium3.11.0:
# coding=utf-8
import time
from selenium import webdriver
driver = webdriver.Firefox()
driver.maximize_window()
driver.get('https://www.baidu.com')
try:
assert u"百度一下" in driver.title
print ('Assertion test pass')
except Exception as e:
print ('Assertion test fail', format(e))
print driver.title
截图如下: