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,例如
c
import requests
def 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 == 200
result = r.json()
assert result['status'] == 0
assert 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 == 200
result = r.json()
assert result['status'] == 0
assert 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.ini中定义标签

- 然后需要在特定用例上打标签

- 当我们需要给很多的测试用例打同一个标签时,可以将他们放在一个测试类中,然后给这个测试类打上标签

- 首先需要在pytest.ini中定义标签
-
pytest -k:执行方法名中包含"关键字"的测试文件或测试用例,如果文件名包含关键字,则会执行该文件下的所有测试用例,否则会查找文件内部包含关键字的测试用例pytest -k '关键字'
-
pytest -q:简化控制台的输出(只有总的通过和失败情况) -
pytest -v:可以输出用例更加详细的执行信息(包括版本号、文件目录,具体测试用例的通过和失败情况) -
pytest -s:输出我们用例中的调试信息(会打印print信息) -
在pytest.ini中配置addopts,可以自动加上运行参数

