Pytest项目_day07(pytest)
Pytest
- 文件名需要以
test_
开头或以_test
结尾,同时文件内部的方法名也需要以test_
开头,这样pytest才会把它当作测试用例文件和测试用例中的测试方法,当我们运行该测试用例文件时,会执行该文件内的所有测试方法 - 如果在控制台直接输入
pytest <文件名>
,那么文件不以test_
开头或以_test
结尾,也能成功执行 - 但是如果
pytest <文件夹名>
,那么pytest只会运行该文件夹下以test_
开头或以_test
结尾的文件 - 一般使用
test_
开头 - 如果测试用例内部的方法没有用
test_
开头,那么pytest不会运行这个方法 - 测试类必须以
Test
开头,且不能有init方法,当我们点击左侧的小三角时,会运行该类下的所有测试方法
- 在pytest中,判断期望值是否跟实际值相等,是使用
assert
来实现的- 使用pytest来运行测试用例时,需要在控制台中,输入pytest <文件名>
- 运行测试用例后,在控制台会显示运行结果
.F
表示第一个通过,第二个没通过E
表示error的代码位置- 右侧的
100%
表示测试用例的所有方法均执行完成
Pytest中的测试用例执行顺序
-
默认执行顺序
- 按照定义的先后,自上而下执行
- 如果是在同一文件夹下的测试用例文件,那么会按照文件名的顺序,自上而下执行
-
使用 pytest-ordering 自定义顺序(需要安装pytest-ordering包)
-
在方法前加上run注解,其中
order=几
,就是第几位执行
常见的断言类型
- 等于:
==
- 不等于:
!=
- 大于:
>
- 小于:
<
- 属于:
in
- 不属于:
not in
- 大于等于:
>=
- 小于等于:
<=
- 是:
is
- 不是:
is not
使用pytest来做request测试
- 这里的
test_mobile()
和test_mobile_post()
是两个近似的测试方法,区别在于一个是get,一个是post - 注意:
- 在Json中,我们可以使用[key]来获取value,例如
result['msg'] == "ok"
- 在Json中,我们可以使用[key]来获取value,例如
import requestsdef test_mobile():params = {"shouji": "13906191369","appkey": "123"}r = requests.get(url="http://sellshop.5istudy.online/sell/shouji/query", params=params)print(r.status_code)assert r.status_code == 200result = r.json()assert result['status'] == 0assert result['msg'] == "ok"assert result['result']["shouji"] == "13906191369"assert result['result']["province"] == "浙江"assert result['result']["city"] == "杭州"assert result['result']["company"] == "中国移动"assert result['result']["areacode"] == "0571"# print(r.json())def test_mobile_post():params = {"shouji": "13906191369","appkey": "123"}r = requests.post(url="http://sellshop.5istudy.online/sell/shouji/query", params=params)assert r.status_code == 200result = r.json()assert result['status'] == 0assert result['msg'] == "ok"assert result['result']["shouji"] == "13906191369"assert result['result']["province"] == "浙江"assert result['result']["city"] == "杭州"assert result['result']["company"] == "中国移动"assert result['result']["areacode"] == "0571"
- 运行后的结果为:
pytest指定目录/文件执行
pytest testcases
指定目录执行,则会依次执行该目录下所有符合条件的测试用例pytest testcases/test_one.py
指定文件执行,则会依次执行该文件内的所有符合条件的测试方法pytest
什么都不加,那么就会从当前的工作环境下,依次执行所有符合条件的测试用例(包括文件夹内)
pytest.ini配置文件
- 可以使用
testpaths
来指定默认执行的路径或文件 - 这样就可以在控制台直接输入
pytest
,默认执行的就是testpaths
的路径,等同于pytest testcases
./
表示和pytest.ini
处在同一级目录下
pytest常用运行参数
pytest -m
:执行特定的测试用例pytest -k
:执行用例包含“关键字”的用例pytest -q
:简化控制台的输出pytest -v
:可以输出用例更加详细的执行信息pytest -s
:输出我们用例中的调试信息