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"
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 -k:执行方法名中包含"关键字"的测试文件或测试用例,如果文件名包含关键字,则会执行该文件下的所有测试用例,否则会查找文件内部包含关键字的测试用例

    • pytest -k '关键字'
  • pytest -q:简化控制台的输出(只有总的通过和失败情况)

  • pytest -v:可以输出用例更加详细的执行信息(包括版本号、文件目录,具体测试用例的通过和失败情况)

  • pytest -s:输出我们用例中的调试信息(会打印print信息)

  • 在pytest.ini中配置addopts,可以自动加上运行参数