自动化测试,一般分三个步骤:
1)设定基础数据,如网址;
2)通过元素定位的方式操作系统;
3)通过对某一操作的预期数据和实际数据比较,判断测试结果;
常用于断言的三种模式
断言被用于三种模式: 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代码逻辑语法错误,不能执行 |
| KeyError | 传入的对象类型与要求不符 |
| KeyError | 试图访问一个还未设置的全局变量,基本上是由于另有一个同名的全局变量,导致你以为在访问 |
| KeyError | 传入一个不被期望的值,即使类型正确 |
常用的unittest断言如下
-
相等断言:assertEqual(self, first, second, msg=None) 常用于title和url的对比来检查是否与预期结果一致;
self.assertEqual(u'用户 - Delicate Cloud Dashboard', driver.title, 'switch to Admin_Identity_User panel fail') -
不等断言:assertNotEqual(self, first, second, msg=None)
与1相反,此断言不常用;** -
True断言:assertTrue(self, expr, msg=None)
此断言可用于对寻找某元素的表达式进行判断,如返回True则通过,否则Fail; -
False断言:assertFalse(self, expr, msg=None)
此断言可用于对寻找某元素的表达式进行判断,如返回False则通过,否则Fail;和4可以配合使用selenium IDE所生成的[Python](http://lib.csdn.net/base/python "Python知识库")脚本中is_element_present和is_alert_present来使用;
| 异常 | 解释 |
|---|---|
| assertEqual(a, b,msg = '测试失败时打印的信息') | 断言a和b是否相等,相等则测试用例通过 |
| assertNotEqual(a, b,msg = '测试失败时打印的信息') | 断言a和b是否相等,不相等则测试用例通过 |
| assertTrue(x,msg = '测试失败时打印的信息') | 断言x是否True,是True则测试用例通过 |
| assertFalse(x,msg = '测试失败时打印的信息') | 断言x是否False,是False则测试用例通过 |
| assertIs(a, b,msg = '测试失败时打印的信息') | 断言a是否是b,是则测试用例通过 |
| assertNotIs(a, b,msg = '测试失败时打印的信息') | 断言a是否是b,不是则测试用例通过 |
| assertIsNone(x,msg = '测试失败时打印的信息') | 断言x是否None,是None则测试用例通过 |
| assertIsNotNone(x,msg = '测试失败时打印的信息') | 断言x是否None,不是None则测试用例通过 |
| assertIn(a, b,msg = '测试失败时打印的信息') | 断言a是否在b中,在b中则测试用例通过 |
| assertNotIn(a, b,msg = '测试失败时打印的信息') | 断言a是否在b中,不在b中则测试用例通过 |
| assertIsInstance(a, b,msg = '测试失败时打印的信息') | 断言a是是b的一个实例,是则测试用例通过 |
| assertNotIsInstance(a, b,msg = '测试失败时打印的信息') | 断言a是是b的一个实例,不是则测试用例通过 |