6.测试断言
断言就是判断实际测试结果与预期结果是否一致,一致则测试通过,否则失败。因此,在自动化测试中,无断言的测试用例是无效的。这是因为当一个功能自动化已全部实现,在每次版本迭代中执行测试用例时,执行的结果必须是权威的,也就是说自动化测试用例执行结果应该无功能性和逻辑性问题。在自动化测试中最忌讳的就是自动化测试的用例功能测试虽然是通过的,但是被测功能本身却是存在问题的。自动化测试用例经常应用在回归测试中,发现的问题不是特别多,如果测试结果存在功能上的问题,自动化测试就没有太大意义了。
所以每一个测试用例必须要有断言。测试结果只有两种可能,通过or失败。在TestCase类中提供了assert方法来检查和报告失败,常用的方法如下:
Method | Checks that | New in |
---|---|---|
assertEqual(a,b) | a == b | |
assertNotEqual(a,b) | a != b | |
assertTrue(x) | bool(x) is True | |
assertFalse(x) | bool(x) is False | |
assertIs(a,b) | a is b | 3.1 |
assertIsNot(a,b) | a is not b | 3.1 |
assertIsNone(x) | x is None | 3.1 |
assertIsNotNone(x) | x is not None | 3.1 |
assertIn(a,b) | a in b | 3.1 |
assertNotIn(a,b) | a not in b | 3.1 |
assertassertIsInstance(a,b) | isinstance(a,b) | 3.2 |
assertNotIsInstance(a,b) | not isinstance(a,b) | 3.2 |
6.1 assertEqual
assertEqual方法用于测试两个值是否相等,如果不相等则测试失败。注意“相等”指的是内容相同且类型相同。例如,两个值虽然内容一致,但一个是bytes类型一个是str类型,则两个值仍为不相等,测试失败。如:
__author__ = 'xiaotufei'
import unittest
from selenium import webdriver
class BaiduTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.driver.implicitly_wait(30)
self.driver.get('http://www.baidu.com')
def tearDown(self):
self.driver.quit()
def test_baidu_title(self):
#验证测试百度首页的title
self.assertEqual(self.driver.title,'百度一下,你就知道'.encode('gbk')) #转化类型
if __name__ == '__main__':
unittest.main(verbosity=2)
以上代码会执行失败,这是因为self.driver.title获取的内容是“百度一下,你就知道”,它的类型是str类型,而我们将它转化成bytes类型后,内容一致,类型不一致,所以失败:
D:\Python\python.exe D:/Work/Tools/python_workspace/Python_unitest/1/assert6.py
test_baidu_title (__main__.BaiduTest) ... FAIL
======================================================================
FAIL: test_baidu_title (__main__.BaiduTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:/Work/Tools/python_workspace/Python_unitest/1/assert6.py", line 17, in test_baidu_title
self.assertEqual(self.driver.title,'百度一下,你就知道'.encode('gbk'))
AssertionError: '百度一下,你就知道' != b'\xb0\xd9\xb6\xc8\xd2\xbb\xcf\xc2\xa3\xac\xc4\xe3\xbe\xcd\xd6\xaa\xb5\xc0'
----------