python+pytest+yaml+ddt+allure例子

项目结构及测试数据准备:

excel中数据,文件名:test.xlsx

文件夹说明:

testcase 存放测试用例
data 存放测试数据
pytest.ini 存放执行设置
readme 存放文件结构说明
report 存放allure测试报告
run.py 存放用例执行入口
temps 存放allure生成的json文件

pytest.ini (运行入口,控制运行main方法及运行参数设置)

[pytest]
addopts = -vs --alluredir ./temps --clean-alluredir
testpaths = ./testcase

参数说明:

-vs :设置打印的参数,v代表详细,s代表把print一些输出调试的内容打印到控制台,方便查看。

--alluredir ./temps  代表使用allure生成报告数据,数据存放在temps文件夹中,这里存的是json 文件。后期再使用生成报告的命令,将jsons数据,转化成html好看的页面报告。

testpaths = ./testcase   表示,我要执行的用例是在testcase文件夹下的所有以test_开头的测试用例。

data文件夹中测试数据yaml格式,文件名为:data1.yaml

 - name: 高明见
   age: 28
   sex: 男
 - name: 小红
   age: 20
   sex: 女
 - name: 张三
   age: 20
   sex: 男
 - name: 小刚
   age: 28
   sex: 女

 common中封装的方法,一个是读取yaml,另一个是读取excel文件

# encoding=utf-8
# @Time    :2021/10/31 9:52
# @Author  :大壮
# @File    :common.py.py
import os

import pytest
import yaml
import openpyxl
from openpyxl import load_workbook


# 读取data文件目录下的yaml测试数据,需要传入yaml文件的名字,调用方法,并返回
def read_yaml(yaml_name):
    with open(os.getcwd() + '/data/' + yaml_name, encoding='utf-8') as f:
        yaml_value = yaml.load(f, Loader=yaml.FullLoader)
        return yaml_value


def read_excel():
    wb = openpyxl.load_workbook("C:/Users/Admin/Desktop/test.xlsx")
    wb.active
    wb.sheetnames
    print("excel文件的所有sheet名字:%s" % wb.sheetnames)
    ws = wb['Sheet1']
    # 遍历接收到的内容
    print("打印出有多少行:%s" % len(tuple(ws.rows)))
    test_date = []
    for x in range(2, len(tuple(ws.rows)) + 1):
        testcase_data = []
        for y in range(2, 4):
            testcase_data.append(ws.cell(row=x, column=y).value)
            print("打印每行的值:%s" % ws.cell(row=x, column=y).value)
        test_date.append(testcase_data)
    print("打印出test_date的值:%s" % test_date)
    return test_date

测试用例:

import openpyxl
import pytest
import requests
import yaml
from ddt import ddt, file_data
from business.common import read_yaml, read_excel
from openpyxl import load_workbook, workbook



# 测试用例01
@ddt()
class TestCe:
    @pytest.mark.parametrize('student', read_yaml(yaml_name='data1.yaml'))
    def test_case0001(self, student):
        name = student['name']
        age = student['age']
        sex = student['sex']
        assert name == '小红'

    def test_case0002(self):
        pass

    @pytest.mark.skip("这个用例跳过不执行")
    def test_case0003(self):
        print("这个用例不执行的")

    @pytest.mark.parametrize('school,address', [['佳木斯大学', '黑龙江佳木斯'], ['清华大学', '北京五道口']])
    def test_case0004(self, school, address):
        print(school)
        print(address)
        assert school == '北京大学'

    @pytest.mark.parametrize('name,age', read_excel())
    def test_case0005(self, name, age):
        print("输出姓名---:%s" % name)
        print("输出年龄---:%s" % age)
        assert name == '小红1' and age == 20

    def test_case0006(self):
        pass

run.py中代码

import pytest
from time import sleep
import os

if __name__ == '__main__':
    pytest.main()
    sleep(3)
    os.system("allure generate ./temps -o ./report --clean")

参数说明:

导入包:

import pytest
from time import sleep
import os

运行参数:

allure generate ./temps -o ./report --clean

意思:将temps下的生成的json报告数据,转化成html报告格式,保存在report文件夹下面,--clean表示每次执行完清空一下,每次重新生成。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值