如何做好自动化测试并生成图文并茂的测试报告

pytest安装

pip install -U pytest

pytest 定义的规范

  • 测试文件
    • test_*.py
    • *_test.py
  • 用例识别
    • Test*类包含的所有test_*的方法(测试类不能带有__init__方法)
    • 不在class中的所有的test_*方法
  • pytest也可以执行unittest框架写的用例和方法

pytest 命令行参数

  • 终端执行
    • pytest/py.test
    • pytest –v (最高级别信息–verbose) 打印详细运行日志信息
    • pytest -v -s 文件名 (s是带控制台输出结果,也是输出详细)
    • pytest 文件名.py 执行单独一个pytest模块
    • pytest 文件名.py::类名 运行某个模块里面某个类
    • pytest 文件名.py::类名::方法名 运行某个模块里面某个类里面的方法
  • 报错停止运行
    • pytest -x 文件名 一旦运行到报错,就停止 运行
    • pytest —maxfail=[num] 当运行错误达到num的时候就停止 运行
    • pytest -k "类名 and not 方法名” 执行某个关键字的用全
    • pytest -m [标记名] @pytest.mark.[标记名] 将运行有这个标记的测试用例

pytest Pycharm 配置

pytest 测试装置

  • import pytest 类似的setup,teardown同样更灵活,
    • 模块级(setup_module/teardown_module)模块始末,全局的(优先最高
    • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
    • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
    • 方法级(setup_method/teardown_methond)开始于方法始末(在类中)
    • 类里面的(setup/teardown)运行在调用方法的前后

allure 下载地址

https://github.com/allure-framework/allure2/releases

allure 特性

  • 场景:
    • 希望在报告中看到测试功能,子功能或场景,测试步骤,包括测试附加信息
  • 解决:
    • @Feature, @story, @step, @attach
  • 步骤:
    • import allure
    • 功能上加@allure.feature(‘功能名称’)
    • 子功能上加@allure.story(‘子功能名称’)
    • 步骤上加@allure.step(‘步骤细节’)
    • @allure.attach(‘具体文本信息’) ,需要附加的信息,可以是数据,文本,图片,视频,网页
    • 如果只测试登录功能运行的时候可以加限制过滤:
      • pytest 文件名 —allure-features ‘购物车功能’ —allure-stories ‘加入购物车’ (注意这里—allure-features中间是-中线)

allure 执行

 pytest test_demo.py --alluredir ./result
allure serve ./result

参考代码

"""
__author__ = 'hogwarts_xixi'
__time__ = '2021/3/10 8:14 下午'
"""
import json

import allure
import pytest
import requests


def test_demo():
    assert True


def test_demo1():
    assert False


def test_demo2():
    assert False


def test_demo3():
    assert True


class TestDemo:
    def setup(self):
        print("开始测试")

    def teardown(self):
        print("结束测试")

    def test_demo(self):
        assert True


    def test_login_ok(self):
        username = "hogwarts"
        password = "123456"

    @pytest.mark.parametrize('username,password',[
        ["hogwartsfail","123456"],
        ["","123456"],
        ["hogwarts",""],
        ["", ""],
        ["123","456"]
    ])
    def test_login_fail(self,username,password):
        print(username)
        print(password)
        # username = "hogwartsfail"
        # password = "123456"

    @allure.title("验证测试人社区 贴子ID")
    @pytest.mark.parametrize('topic_id',[
        "10704","10705","10706","10707"
    ])
    def test_ceshiren(self,topic_id):
        with allure.step("访问【测试人社区】"):
        # topic_id = "10706"
            result = requests.get(f"https://ceshiren.com/t/topic/{topic_id}.json")
            print(result.json())
            response_id = result.json()['id']
        with allure.step("验证测试结果"):
            assert topic_id == str(response_id)
        allure.attach.file("/Users/juanxu/Documents/图片/扫一扫.jpeg",attachment_type=allure.attachment_type.JPG)
        # json.loads()

        allure.attach