前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python系列】pytest自动化测试框架

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

作者头像
用户9913368
发布2022-08-13 16:19:39
7880
发布2022-08-13 16:19:39
举报
文章被收录于专栏:嘎嘎软件测试嘎嘎软件测试

‍目录

一、前言

二、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天可入门。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嘎嘎软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档