断言是完整的测试用例中不可或缺的因素,用例只有加入断言,将实际结果与预期结果进行比对,才能判断它的通过与否。
unittest 框架提供了其特有的断言方式,如:assertEqual、assertTrue、assertIn等,pytest 同样有自己的断言方式,即使用assert
进行断言。
pytest 中使用python源生态assert
字段进行断言。
常用断言方式
pytest常用的断言方式如下:
assert 断言的对象可以是字符串、int、float、list、dict、tuple 任一类型。
使用示例
自定义了一个查询所有用户信息接口,返回参数格式如下:
- {
- "code": 1000,
- "data": [
- {"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"},
- {"id": 2, "username": "梅艳芳", "sex": 1, "telephone": "95511", "address": "上海黄浦区"},
- {"id": 3, "username": "陈百强", "sex": 0, "telephone": "10086", "address": "北京海淀区"},
- ]
- }
用例断言如下:
- def test_get_all_users():
- '''查询所有用户信息'''
- url = "http://127.0.0.1:5000/users"
- res = requests.get(url=url).text
- res = json.loads(res)
- # 断言是否相等
- assert res['code'] == 1000
- # 断言返回结果中data是否为True(这里其实就是判断是否为空)
- assert res['data']
-
- Andy = {"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"}
- # 断言返回结果中data是否包含刘德华的信息
- assert Andy in res['data']
断言通过:
我们修改一下脚本让断言不通过,如下:
- def test_get_all_users():
- '''查询所有用户信息'''
- url = "http://127.0.0.1:5000/users"
- res = requests.get(url=url).text
- res = json.loads(res)
- # 断言是否相等
- assert res['code'] == 1001
- # 断言返回结果中data是否为True(这里其实就是判断是否为空)
- assert not res['data']
-
- Andy = {"id": 1, "username": "刘德华", "sex": 0, "telephone": "12306", "address": "香港九龙区"}
- # 断言返回结果中data是否包含刘德华的信息
- assert Andy not in res['data']
运行结果如下:
可以看到,code 的 Actual 为1000,而 Excepted 为1001,所以断言直接报错,不继续执行后面的代码。
断言结果添加异常信息
我们可以在断言异常的时候,输出一些提示信息,这样断言报错后,可以方便我们查看原因。
自定义的用户信息接口可以查询某个用户的信息,对它编写测试脚本如下:
- def test_get_user():
- '''查询所有用户信息'''
- url = "http://127.0.0.1:5000/users/1"
- res = requests.get(url=url).text
- res = json.loads(res)
- assert res['code'] == 1000
- assert res['data']['username'] == "张学友", "判断返回是否为张学友,实际返回:{}".format(res['data']['username'])
运行结果如下:
pytest 还能对执行过程中产生的 Exception 及 Warnning 进行断言,但这些情况在我们的测试中很少会用到,所以不做过多阐述。
【或私信000】
群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
项目实战:
大型电商平台:
全套软件测试自动化测试教学视频
300G教程资料下载【视频教程+PPT+项目源码】
全套软件测试自动化测试大厂面经
python自动化测试++全套模板+性能测试
听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!