5.3 python之自动化测试 了解_03 2021-06-23

pyTest执行Excel用例生成Allure报告

1. Pytest框架环境搭建

# 首先使用pip安装pytest
pip install pytest
pip install pytest-html	#原生态报告模版
# 查看 pytest 是否安装成功
pip show pytest

使用pytest执行测试需要遵行的规则:
py测试文件必须以test开头(或者以_test结尾);
测试类必须以Test开头,并且不能init方法;
测试方法必须以test_开头
断言必须使用assert

2. 数据驱动(主要集中在test_case包中的test_login文件中)直接上代码:

项目整体结构如下:
在这里插入图片描述

  1. config文件配置:
HOST = "https://**********";    #请求地址
  1. loginCase.yml文件代码:
# 注释  登录接口

- #test_01用例
  detail: 账号与密码都正确
  data: #请求体
    username: "superadmin"
    password: "111111"
    type: 2
  resp:
    code: 200
    message: "操作成功!"

- #test_01用例
  detail: 账号与密码都正确
  data: #请求体
    username: "superadmin"
    password: "1111111"
    type: 2
  resp:
    code: 200
    message: "操作成功!"
  1. login.index:
from config.index import HOST;
import requests;
import hashlib;


# md5加密方法处理
def get_md5(psw):
    md5 = hashlib.md5();
    md5.update(psw.encode("utf-8"));
    return md5.hexdigest();

# 登录接口模块封装
class Login:
    def login(self,params):
        url = f"{HOST}/login";
        resq = requests.post(url,json=params);
        return resq.json()

if(__name__ == "__main__"):
    res = Login().login({"username":"superadmin","password":"111111","type":2});
    print(res)
  1. text_case.text_login:
# 文件名必须以test开头  test_login
import pytest;
import allure,os
from tools.yamlContpl import get_yaml_data;
from login.index import Login

# 接上集讲的登录接口 - 测试类封装
# 测试类必须以`Test`开头
class TestLogin():
    # params response  为参数
    # get_yaml_data("../data/loginCase.yml") 对应着两个参数
    # get_yaml_data("../data/loginCase.yml") 值为
    #       [(
    #         {'username': 'superadmin', 'password': '111111', 'type': 2},
    #         {'code': 200, 'message': '操作成功!'}
    #       )]
    #  数组中有多少个元组就以为着会运行 下面那个方法多少字  元组的每一项和前面的参数一一对应
    #  详细说明  {'username': 'superadmin', 'password': '111111', 'type': 2} 对应着参数 params
    #  详细说明  {'code': 200, 'message': '操作成功!'} 对应着参数 response
    #  那么就是说params是调用login方法的参数
    @pytest.mark.parametrize("params,response",get_yaml_data("../data/loginCase.yml")) #数据驱动方法  这个方法后面千万别加分号
    def test_login(self,params,response):
        print(params)
        res = Login().login(params);
        # 拿请求到的数据 res中的message  和 希望得到的数据 response中的message  进行对比
        assert res["message"] == response["message"];

# 运行测试用例  test_001
if (__name__ == "__main__"):
    # 运行test_login.py文件   --alluredir 输出报告  路径为 ../eport/tmp
    pytest.main(["test_login.py","-s","--alluredir","../report/tmp"]);  # -s  打印输出   不加-s  不会有输出
    # 浏览器中开启一个服务  将输入日志打印出来
    os.system("allure serve ../report/tmp")
    # 调用后,控制台输出:
        # F 为用例失败
        # E error  失败
        # . 成功

  1. tools.yamlContpl.py
#读取yml文件需要安装 pyYaml库
import yaml;
def get_yaml_data(fileDir):
    # 打开文件
    fo = open(fileDir,"r",encoding="utf-8");
    # 读取其中全部内容
    res = yaml.load(fo,Loader=yaml.FullLoader);
    fo.close();
    # 对数据进行处理  处理为数组元组  为pytest框架做准备
    # 将请求参数和希望值放到一个元组当中
    # 将元组放入list数组挡住
    list = []
    for i in res:
        list.append((i["data"],i["resp"]))
    return list
if(__name__ == "__main__"):
    res = get_yaml_data("../data/loginCase.yml");
    print(res)

上面的代码就将多个测试用例利用框架一次性实现,那么我们想要导出响应的报告就需要Allure来进行一起去做

3. Pytest结合Allure执行测试

安装allure
mac 安装:brew install allure
window安装:下载allure.zip 将解压后的bin路径添加环境变量
验证allure是否安装成功 allure
安装allure-pytest:pip install allure-pytest
allure生成报告的原理:
1 .生成报告所需的文件
2.使用一些工具打开可视化报告
那么该如何实现呢. 将test_case.test_login.py文件中的代码修改为如下所示?

# 文件名必须以test开头  test_login
import pytest;
import allure,os
from tools.yamlContpl import get_yaml_data;
from login.index import Login

# 接上集讲的登录接口 - 测试类封装
# 测试类必须以`Test`开头
class TestLogin():
    # params response  为参数
    # get_yaml_data("../data/loginCase.yml") 对应着两个参数
    # get_yaml_data("../data/loginCase.yml") 值为
    #       [(
    #         {'username': 'superadmin', 'password': '111111', 'type': 2},
    #         {'code': 200, 'message': '操作成功!'}
    #       )]
    #  数组中有多少个元组就以为着会运行 下面那个方法多少字  元组的每一项和前面的参数一一对应
    #  详细说明  {'username': 'superadmin', 'password': '111111', 'type': 2} 对应着参数 params
    #  详细说明  {'code': 200, 'message': '操作成功!'} 对应着参数 response
    #  那么就是说params是调用login方法的参数
    @pytest.mark.parametrize("params,response",get_yaml_data("../data/loginCase.yml")) #数据驱动方法  这个方法后面千万别加分号
    def test_login(self,params,response):
        print(params)
        res = Login().login(params);
        # 拿请求到的数据 res中的message  和 希望得到的数据 response中的message  进行对比
        assert res["message"] == response["message"];

# 运行测试用例  test_001
if (__name__ == "__main__"):
    # 运行test_login.py文件   --alluredir 输出报告  路径为 ../eport/tmp
    pytest.main(["test_login.py","-s","--alluredir","../report/tmp"]);  # -s  打印输出   不加-s  不会有输出
    # 浏览器中开启一个服务  将输入日志打印出来
    os.system("allure serve ../report/tmp")
    # 调用后,控制台输出:
        # F 为用例失败
        # E error  失败
        # . 成功

当我们想要在自动化执行前、执行后执行一些操作 我们应该怎么去做操作呢?
在运行用例的pakage下新建名为conftest.py的文件,名称不能更改,代码如下:

import pytest;
@pytest.fixture(scope="session",autouse=True)
def start_running():
    print("自动化测试开始前1111");
    yield
    print("自动化测试结束")

print中自由操作,做自己想做的事

python的一些基本操作,从爬虫、游戏、抓包、自动化到目前为止就有了一个大概的认知,那么接下来使用python去专研哪个方向,就交给大家咯。花一段时间去深入的学习一下我自己的老本行,一个月左右回来,带着大家一起去走进运维的世界,那个世界是真的美好!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值