python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-9-Allure测试报告

python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-9-Allure测试报告,第1张

python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-9-Allure测试报告

1、 安装

 最新下载地址:https://github.com/allure-framework/allure2/releases

配置环境变量:

2、使用

[pytest]

#addopts = --html=./report/report.html  --reruns 3 --reruns-delay=2
#addopts = --html=./report/report.html -s
addopts =  -s --alluredir ./report/result


testpaths = testcase

python_files = test_*.py

python_classes = Test*

python_functions = test_*

生成测试报告:allure generate report/result -o report/html --clean

allure应用

# -*- coding: utf-8 -*- 
# @Time : 2021/12/12 3:18 
# @Author : jeffky
# @File : test_excel_case.py
import json
from pprint import pprint
import pytest as pytest
from utils.AssertUtil import AssertUtil
from common.base import *
from utils.RequestsUtil import Request
from common import ExcelConfig
from utils.LogUtil import my_log
from config.Conf import ConfigYaml, base_DIR
from common.ExcelData import Data
import os
import allure

# 1、初始化信息
# 1)初始化测试用例文件

conf_read = ConfigYaml()
case_file =os.path.join((base_DIR+os.sep+"data"),conf_read.get_excel_file())
# print(case_file)
# 2)测试用例sheet名称
sheet_name = conf_read.get_excel_sheet()
# 3)获取是否都运行测试用例列表
data_init = Data(case_file,sheet_name)
run_list = data_init.get_run_list()

# 初始化data_conf
data_key = ExcelConfig.DataConfig
# 4)日志
log = my_log()


# 2、测试用例方法,参数化运行
class TestExcel:
    # 1、增加pytest
    # 2、修改方法参数
    # 3、重构函数内容
    # 4、pytest.main
    def run_api(self,url,method,params=None,header=None,cookie=None):
        '''
        发送请求api
        :return:
        '''
        request = Request()
        if len(str(params).strip()) is not 0:
            params=json.loads(params)
        # method post/getopt
        if str(method).lower()=='get':
            # 2、增加headers
            res = request.get(url,json=params,headers = header,cookies=cookie)
        elif str(method).lower()=='post':
            res = request.post(url,json=params,headers = header,cookies=cookie)
        else:
            log.error("错误请求method--->",method)
        return res




    def run_pre(self,pre_case):
        url = conf_read.get_conf_url()+pre_case[data_key.url]
        print("url---->",url)
        method = pre_case[data_key.method]
        params=pre_case[data_key.params]
        headers = pre_case[data_key.headers]
        cookies = pre_case[data_key.cookies]
        # 1、判断headers是否存在,json转义,无需
        header =json_parse(headers)
            # 3、增加cookis
        cookie = json_parse(cookies)

        res =self.run_api(url, method, params, header, cookie)
        print('前置用例执行条件-----》',res)
        return res


# 1)初始化信息,url,data
    # 1、增加pytest
    @pytest.mark.parametrize("case",run_list)
    def test_run(self,case):
        # data_key = ExcelConfig.DataConfig
        # run_list第1个用例,key获取values
        url = conf_read.get_conf_url()+case[data_key.url]
        print("url---->",url)
        case_id = case[data_key.case_id]
        case_model=case[data_key.case_model]
        case_name=case[data_key.case_name]
        pre_exec = case[data_key.pre_exec]
        method =case[data_key.method]
        params_type=case[data_key.params_type]
        params=case[data_key.params]
        expect_result = case[data_key.expect_result]
        headers = case[data_key.headers]
        cookies = case[data_key.cookies]
        code = case[data_key.code]
        db_verify=case[data_key.db_verify]



        # 1、验证前置条件
        if pre_exec:
            # 前置测试用例
            pre_case = data_init.get_case_pre(pre_exec)
            pre_res = self.run_pre(pre_case)
            headers,cookies = self.get_correlation(headers,cookies,pre_res)
        # 1、判断headers是否存在,json转义,无需
        header =json_parse(headers)
            # 3、增加cookis
        cookie = json_parse(cookies)
    # 2)接口请求
        res = self.run_api(url, method, params, header, cookie)
        print("测试用例执行----->",res)
        # sheet名称  feature 一级标签
        allure.dynamic.feature(sheet_name)
        # 模块   story 二级标签
        allure.dynamic.story(case_model)
        # 用例ID+接口名称  title
        allure.dynamic.title(case_id+case_name)
        # 请求URL  请求类型 期望结果 实际结果描述
        desc = "请求url:{}
" "请求类型:{}
" "期望结果:{}
" " 实际结果:{}".format(url,method,expect_result,res) allure.dynamic.description(desc) #断言验证 # 状态码, 返回结果内容,数据库相关结果验证 # 状态码 assert_util = AssertUtil() assert_util.assert_code(int(res['code']),int(code)) # 返回结果内容 assert_util.assert_in_body(str(res['body']),str(expect_result)) # 数据库相关结果验证 # 1、初始化数据库 from common.base import init_db # 2、查询sql,excel定义好的 if db_verify: # conn = init_db('db_1') # res_db = conn.fetchone(db_verify) # log.debug("数据库查询结果:{}".format(str(res_db))) # # assert_util.assert_body(res['body']['username'],res_db['username']) # # 3、数据库的结果与接口返回的结果验证 # # 获取数据库结果的key # verify_list = list(dict(res_db).keys()) # # 根据key获取数据库结果,接口结果 # for line in verify_list: # res_line = res['body'][line] # res_db_line = dict(res_db)[line] # # 验证 # assert_util.assert_body(res_line , res_db_line) assert_db("db_1",res['body'],db_verify) # 关联 def get_correlation(self,headers,cookies,pre_res): # 验证是否有关联 headers_para,cookies_para = params_find(headers,cookies) # 有关联执行前置用例,获取结果 if len(headers_para): headers_data = pre_res['body'][headers_para[0]] # 结果替换 headers = res_sub(headers,headers_data) if len(cookies_para): cookies_data = pre_res['body'][cookies_para[0]] # 结果替换 cookies= res_sub(cookies,cookies_data) return headers,cookies if __name__ == '__main__': pytest.main(['-s','test_excel_case.py']) #动态关联 # 1、验证前置条件 # 2、找到执行用例 # 3、发送请求,获取前置用例结果 # 发送获取前置测试用例,用例结果 # 数据初始化,get/post,重构 # 4、替换headers变量 # 5、请求发送

 

 

 修改base

def allure_report(report_path,report_html):
    '''
    生成allure报告
    :param report_path: 
    :param report_html: 
    :return: 
    '''
    allure_cmd='allure generate %s -o %s --clean'%(report_path,report_html)
    log.info("报告地址")
    try:
        subprocess.call(allure_cmd,shell=True)
    except:
        log.error("执行用例失败,请检查一下测试环境相关配置")
        raise

修改conf

#定义report目录的路径
_report_path = base_DIR+os.sep+"report"

def get_report_path():
    return _report_path

编辑测试用例

# -*- coding: utf-8 -*- 
# @Time : 2021/12/12 3:18 
# @Author : jeffky
# @File : test_excel_case.py
import json
from pprint import pprint
import pytest as pytest
from utils.AssertUtil import AssertUtil
from common.base import *
from utils.RequestsUtil import Request
from common import ExcelConfig
from utils.LogUtil import my_log
from config.Conf import ConfigYaml, base_DIR, get_report_path
from common.ExcelData import Data
import os
import allure

# 1、初始化信息
# 1)初始化测试用例文件

conf_read = ConfigYaml()
case_file =os.path.join((base_DIR+os.sep+"data"),conf_read.get_excel_file())
# print(case_file)
# 2)测试用例sheet名称
sheet_name = conf_read.get_excel_sheet()
# 3)获取是否都运行测试用例列表
data_init = Data(case_file,sheet_name)
run_list = data_init.get_run_list()

# 初始化data_conf
data_key = ExcelConfig.DataConfig
# 4)日志
log = my_log()


# 2、测试用例方法,参数化运行
class TestExcel:
    # 1、增加pytest
    # 2、修改方法参数
    # 3、重构函数内容
    # 4、pytest.main
    def run_api(self,url,method,params=None,header=None,cookie=None):
        '''
        发送请求api
        :return:
        '''
        request = Request()
        if len(str(params).strip()) is not 0:
            params=json.loads(params)
        # method post/getopt
        if str(method).lower()=='get':
            # 2、增加headers
            res = request.get(url,json=params,headers = header,cookies=cookie)
        elif str(method).lower()=='post':
            res = request.post(url,json=params,headers = header,cookies=cookie)
        else:
            log.error("错误请求method--->",method)
        return res




    def run_pre(self,pre_case):
        url = conf_read.get_conf_url()+pre_case[data_key.url]
        print("url---->",url)
        method = pre_case[data_key.method]
        params=pre_case[data_key.params]
        headers = pre_case[data_key.headers]
        cookies = pre_case[data_key.cookies]
        # 1、判断headers是否存在,json转义,无需
        header =json_parse(headers)
            # 3、增加cookis
        cookie = json_parse(cookies)

        res =self.run_api(url, method, params, header, cookie)
        print('前置用例执行条件-----》',res)
        return res


# 1)初始化信息,url,data
    # 1、增加pytest
    @pytest.mark.parametrize("case",run_list)
    def test_run(self,case):
        # data_key = ExcelConfig.DataConfig
        # run_list第1个用例,key获取values
        url = conf_read.get_conf_url()+case[data_key.url]
        print("url---->",url)
        case_id = case[data_key.case_id]
        case_model=case[data_key.case_model]
        case_name=case[data_key.case_name]
        pre_exec = case[data_key.pre_exec]
        method =case[data_key.method]
        params_type=case[data_key.params_type]
        params=case[data_key.params]
        expect_result = case[data_key.expect_result]
        headers = case[data_key.headers]
        cookies = case[data_key.cookies]
        code = case[data_key.code]
        db_verify=case[data_key.db_verify]



        # 1、验证前置条件
        if pre_exec:
            # 前置测试用例
            pre_case = data_init.get_case_pre(pre_exec)
            pre_res = self.run_pre(pre_case)
            headers,cookies = self.get_correlation(headers,cookies,pre_res)
        # 1、判断headers是否存在,json转义,无需
        header =json_parse(headers)
            # 3、增加cookis
        cookie = json_parse(cookies)
    # 2)接口请求
        res = self.run_api(url, method, params, header, cookie)
        print("测试用例执行----->",res)
        # sheet名称  feature 一级标签
        allure.dynamic.feature(sheet_name)
        # 模块   story 二级标签
        allure.dynamic.story(case_model)
        # 用例ID+接口名称  title
        allure.dynamic.title(case_id+case_name)
        # 请求URL  请求类型 期望结果 实际结果描述
        desc = "请求url:{}
" "请求类型:{}
" "期望结果:{}
" " 实际结果:{}".format(url,method,expect_result,res) allure.dynamic.description(desc) #断言验证 # 状态码, 返回结果内容,数据库相关结果验证 # 状态码 assert_util = AssertUtil() assert_util.assert_code(int(res['code']),int(code)) # 返回结果内容 assert_util.assert_in_body(str(res['body']),str(expect_result)) # 数据库相关结果验证 # 1、初始化数据库 from common.base import init_db # 2、查询sql,excel定义好的 if db_verify: # conn = init_db('db_1') # res_db = conn.fetchone(db_verify) # log.debug("数据库查询结果:{}".format(str(res_db))) # # assert_util.assert_body(res['body']['username'],res_db['username']) # # 3、数据库的结果与接口返回的结果验证 # # 获取数据库结果的key # verify_list = list(dict(res_db).keys()) # # 根据key获取数据库结果,接口结果 # for line in verify_list: # res_line = res['body'][line] # res_db_line = dict(res_db)[line] # # 验证 # assert_util.assert_body(res_line , res_db_line) assert_db("db_1",res['body'],db_verify) # 关联 def get_correlation(self,headers,cookies,pre_res): # 验证是否有关联 headers_para,cookies_para = params_find(headers,cookies) # 有关联执行前置用例,获取结果 if len(headers_para): headers_data = pre_res['body'][headers_para[0]] # 结果替换 headers = res_sub(headers,headers_data) if len(cookies_para): cookies_data = pre_res['body'][cookies_para[0]] # 结果替换 cookies= res_sub(cookies,cookies_data) return headers,cookies if __name__ == '__main__': report_path = get_report_path()+os.sep+"result" report_html= get_report_path()+os.sep+"html" pytest.main(['-s','test_excel_case.py','--alluredir',report_path]) allure_report(report_path ,report_html) #动态关联 # 1、验证前置条件 # 2、找到执行用例 # 3、发送请求,获取前置用例结果 # 发送获取前置测试用例,用例结果 # 数据初始化,get/post,重构 # 4、替换headers变量 # 5、请求发送

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5665990.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存