项目结构及测试数据准备:
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表示每次执行完清空一下,每次重新生成。