【Python系列】pytest自动化测试框架

2022-08-13 16:19:39 浏览数 (1)

‍目录

一、前言

二、pytest简介

三、pytest入门

四、总结

一、前言

这两天学习了pytest测试框架,下面我就来简单分享下学习成果。

二、pytest简介

pytest是Python的测试框架,特点就是灵活、简单、易上手。

pytest有丰富的第三方插件,比较好用的如

pytest-selenium(集成selenium)、

pytest-html(完美html测试报告生成)、

pytest-rerunfailures(失败case重复执行)、

pytest-xdist(多CPU分发)等。

三、pytest入门

3.1、pytest安装

代码语言:javascript复制
# 安装pytest
pip install -U pytest

# 查看pytest版本
pytest --version

3.2、pytest规则

  • 测试文件以test_开头(以_test结尾也可)
  • 测试类以Test开头,注意,Test首字母要大写
  • 测试类名称后面直接跟冒号,而不能有()
  • 测试类不能带有 __init__ 方法
  • 测试类里的每个函数都必须有参数(self)
  • 测试函数以test_开头,注意,这时首字母要小写
  • 断言使用基本的assert即可

3.3、pytest入门demo

新建一个python文件pytest_demo.py。

代码语言:javascript复制
import pytest

def add(a, b):
    return a   b

@pytest.mark.parametrize('a,b,expect', [
    [1, 1, 2],
    [2, 2, 4],
    [3, 3, 6],
    [4, 4, 8],
    [5, 5, 10]
])
def test_add_list(a, b, expect):
    assert add(a, b) == expect
                            
# 执行方式一
# "-s": 显示程序中的print/logging输出
# "-v": 丰富信息模式, 输出更详细的用例执行信息               
if __name__ == '__main__':
    pytest.main(["-s", "-v", "pytest_demo.py"])

# 执行方式二
#在Terminal或者cmd执行:python -m pytest pytest_demo.py

执行结果:

3.4、pytest参数分离

3.4.1、excel参数化

为了更灵活的设计自动化测试用例,可以将测试用例写到excel或者json,再进行读取。

新建python文件pytest_excel.py。

代码语言:javascript复制
import pytest
import requests
import xlrd
import json


def readExcel():
    data = list()
    book = xlrd.open_workbook('../testdata/excel_data.xls')
    sheet = book.sheet_by_index(0)
    for item in range(1, sheet.nrows):
        data.append(sheet.row_values(item))
    return data


@pytest.mark.parametrize('data', readExcel())
def test_excel(data):
    r = requests.post(
        url=data[0],
        json=json.loads(data[1]))
    assert r.json() == json.loads(data[2])


if __name__ == '__main__':
    pytest.main(["-s", "-v", "pytest_excel.py"])

准备excel_data.xls内容如下:

url

body

expect

http://localhost:9999/demo/update

{"id":"111","username": "pyauto1","password": "123456"}

true

http://localhost:9999/demo/update

{"id":"222","username": "pyauto2","password": "123456"}

true

3.4.2、json参数化

新建python文件pytest_json.py。

代码语言:javascript复制
import pytest
import requests
import json


def readJson():
    return json.load(open('../testdata/json_data.json', 'r', encoding="utf-8"))['item']


@pytest.mark.parametrize('data', readJson())
def test_json(data):
    r = requests.post(
        url=data['request']['url'],
        json=data['request']['body'])
    assert str(r.json()).lower() == data['response']


if __name__ == '__main__':
    pytest.main(["-s", "-v", "pytest_json.py"])

准备json_data.json.xls内容如下:

代码语言:javascript复制
{
  "item":
  [
    {
      "request":
      {
        "url": "http://localhost:9999/demo/update",
        "body":
        {
          "id":"111",
          "username": "pyauto1",
          "password": "123456"
        }
      },
      "response":"true"
    },
    {
      "request":
      {
        "url": "http://localhost:9999/demo/update",
        "body":
        {
          "id":"222",
          "username": "pyauto2",
          "password": "123456"
        }
      },
      "response":"true"
    }
  ]
}

3.5、pytest-allure测试报告

3.5.1、win安装allure

代码语言:javascript复制
allure下载地址:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/

下载allure-commandline-x.x.x.zip。解压后将allure/bin添加到系统变量中,在cmd中输入allure验证是否安装成功。

3.5.2、生成allure测试报告

代码语言:javascript复制
# 在测试文件的当前路径执行如下命令执行测试用例:
pytest -v pytest_json.py --alluredir ./allure

# 执行如下命令生成测试报告(自动打开浏览器):
allure serve allure

3.5.3、allure测试报告如下

四、总结

果然,pytest灵活、简单、易上手,没骗人(笑),有点Python基础的情况下,实测1天可入门。

0 人点赞