文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Pytest+Request+Allure+Jenkins实现接口自动化

2024-04-02 19:55

关注

实现步骤:

框架结构:

1、接口自动化项目代码编写(先在window实现)

1.1 项目准备

先在window安装响应的环境依赖

注意:可能还需要一些依赖的东西,项目步骤里会依据需要进行安装

1.2 设计基于pytest的测试框架结构

在pycharm中开发构建项目结构

common:存放公共方法
config:存放环境配置信息
lib:存放第三方库
main:框架主入口
report:存放allure测试报告
test_case:存放测试用例
test_data:存放测试数据

1.3 实现接口公共请求发送能力

从这一步开始正式编写代码

封装http请求的公共能力(封装request库,变成自己的公共处理能力),放到common目录下。

# encoding: utf-8
 
import requests
import urllib3
# from urllib3.exceptions import InsecureRequestWarning
 
urllib3.disable_warnings()
# 加这句不会报错(requests证书警告)
# requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
 
 
class HTTPRequests(object):
    def __init__(self, url):
        self.url = url
        self.req = requests.session()
        # 依据自己公司的请求头默认值配置
        self.head = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko',
            'Accept': 'image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, '
                      'application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, '
                      'application/msword, **',
        'Accept-Language': 'zh-CN',
        'Authorization': token}
 
    yield head

1.6 将测试数据放到excel中

我们的测试数据是放在excel中,注意,这里有prod\test\dev三个目录,对应三个环境的测试数据,我这里只创建了test测试环境的测试数据。这里的测试数据需要包含两部分:

那么这时候,就需要一个读取excel的公共方法了,放到common里

# 创建解析excel的方法
import logging
 
from openpyxl import load_workbook
 
logger = logging.getLogger("读取excel")
 
 
class ParseExcel(object):
    def __init__(self, excelPath, sheetName):
        self.wb = load_workbook(excelPath)
        self.sheet = self.wb[sheetName]
        self.maxRowNum = self.sheet.max_row
 
 
    # 依据传入的数字,决定获取几列excel数据
    def getDataFromSheet(self, num):
        dataList = []
        for line in self.sheet.rows:
            tmplist = []
            for i in range(num):
                tmplist.append(line[i].value)
            dataList.append(tmplist)
            print("dadddddd:{}".format(dataList))
 
        return dataList[2:]

这里,还需要再test_data中,创建一个文件,为了获取前面test_data依据环境创建的dev/test或prod文件目录

1.7 开始编写自动化测试案例了

测试案例中有几个点,需要解释一下:
1、authBaseDir,这个就是根据test_data/test拼接出来的获取测试数据的目录
2、allure.feature,在测试报告中,会展现这个接口名称,这个名称最好与你公司的开发写的接口模块保持一致,方便后续查找问题
3、allure.story 这里也要与开发写的具体某个接口的名称保持一致。
4、pytest.mark.parametrize,这里就是运用的DDT数据驱动的模式,从excel中一条一条的获取数据,然后执行同一条接口测试用例,excel中比如有3条数据,那么就表示这个案例依据每一条数据的参数,总共执行了三次

# encoding: utf-8
 
"""
 
Account Api模块
"""
import logging
import os
 
import allure
import pytest
 
from common.get_data_url import get_data_url
from common.parse_excel import ParseExcel
 
datadir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "test_data")
data_url = get_data_url()
# 获取到test_data\test的目录,如果是prod环境,那么就是获取test_data\prod目录
authBaseDir = os.path.join(datadir, data_url)
 
logger = logging.getLogger("Account Api模块日志")
 
 
@allure.feature("AccountApi模块")
@pytest.mark.webtest
class TestAccountApi(object):
    """Query Related Achievements: /api/auth/account/achievement/related/query/v1
 
    """
    Query_Related_Achievements_dir = os.path.join(authBaseDir, 'Query_Related_Achievements.xlsx')
    logger.info("Query_Related_Achievements测试数据的路径是:{}".format(Query_Related_Achievements_dir))
    parse = ParseExcel(Query_Related_Achievements_dir, 'Sheet1')
    Query_Related_Achievements_params = parse.getDataFromSheet(5)
 
    @allure.story("Query Related Achievements(查询用户成就信息)")
    @pytest.mark.parametrize("clientType,language,retCode,istoken,result", Query_Related_Achievements_params)
    def test_001_Query_Related_Achievements(self, get_token_head, http, clientType, language, retCode, istoken, result):
        uri = '/api/auth/account/achievement/related/query/v1'
        params = {"clientType": clientType, "language": language}
 
        if istoken == 'yes':
            header = get_token_head
            response = http.get(uri=uri, params=params, headers=header)
            json_req = response.json()
            logger.info("Query_Related_Achievements有token的返回值是:{}".format(json_req))
 
            assert json_req.get('retCode') == 200
            assert json_req.get('result')[0]['smallImg'] == result
        else:
            response = http.get(uri=uri, params=params)
            json_req = response.json()
            logger.info("Query_Related_Achievements没有token的返回值是:{}".format(json_req))
 
            assert json_req.get('retCode') == 401
            assert json_req.get('message') == result

1.8 集成allure

写到这里,是不是发现前面的allure.feature是不是用不了呢?这是因为我们还没有集成allure进去。
1、下载allure,放到lib目录下,使你的工程具备allure的能力。

2、pip install allure-pytest安装pytest对应的allure包

1.9 这时候就可以创建一些执行策略了

1、先在main中创建一个pytest.ini文件,设置一些执行参数

2、在main中创建执行策略

# encoding: utf-8
 
 
"""
所有案例执行并生成allure测试报告的执行策略
"""
 
import os
import sys
import threading
import pytest
 
 
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../')
from common.report import Report
 
 
project_root = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
report_dir = os.path.join(project_root, 'report')
# 存放测试结果的目录,会生成一推json文件
result_dir = os.path.join(report_dir, 'allure_result')
allure_report = os.path.join(report_dir, 'allure_report')
 
report = Report()
 
#  定义搜索条件,搜索所有以test开头的用例
tag = 'test'
 
 
def run_pytest():
    # --clean-alluredir
    # pytest.main(['-vv', '-s', '-m', 'webtest', f'--alluredir={result_dir}', '--clean-alluredir'])
    # 执行前清除allure_result数据,避免生成报告时,会把上次执行的数据带进去
    pytest.main(['-vv', '-s', '-k', f'{tag}', f'--alluredir={result_dir}', '--clean-alluredir'])
 
 
def general_report():
    # 调用cmd方法 report.allure,根据windows或linux环境判断
    # 然后执行生成报告的方法generate
    # --clean 覆盖路径,将上次的结果覆盖掉
    cmd = "{} generate {} -o {} --clean".format(report.allure, result_dir, allure_report)
    # 执行命令行命令,并通过read()方法将命令的结果返回
    print(os.popen(cmd).read())
 
 
if __name__ == '__main__':
    # 创建两个线程,分别执行两个方法
    run = threading.Thread(target=run_pytest)
    gen = threading.Thread(target=general_report)
    run.start()
    # 先执行第一个线程,这个线程执行完才会执行下面的线程和主线程
    run.join()
    gen.start()
    gen.join()

1.10 自动化执行生成结果

在windows下,右键执行main下面的run_test_allure_html.py(就是上一个步骤的python文件),然后打开report/allure_report/index.html看看报告是否生成成功

2. jenkins环境搭建(linux环境)

好了,到这一步,在windows下我们已经执行成功,现在我们要集成到jenkins环境去,并搭建在linux环境下。
1、将代码上传到公司的git(没有git的自己搭建一套吧)
2、找一台linux机器(自己去自己公司找资源)
3、在linux下安装jenkins(我是放到tomcat中)、python3、pytest、allure、openpyxl(这些步骤在网上可以搜索到,这里不赘述了)
4、启动linux下的tomcat,然后在window下打开jenkins的服务地址

5、创建一个自由风格的job

6、Job需要填写的具体内容有:

A、选择丢弃旧的构建(保留的构建天数依据自己的情况选择)

B、“限制项目的运行节点”依据自己的情况选择(我这里给我的jenkins主服务器取了一个叫linux的标签,我的机器也是linux机器)

C、git--将git上的代码拉下来

D、“执行shell”,这里把代码从git拉到了jenkins的执行目录里,一般在linux下的root/.jenkins里,在执行shell时,最好chmod修改下整个工程的目录权限,因为有可能因权限问题执行不了

E、构建后的操作:这里需要再jenkins里安装allure插件才能看到allure Report,第一个Path,这里写的是allure生成的json文件的目录,所以是report/allure_result,第二个Report path指的是生成的index.html文件的目录,所以是report/allure_report

立即构建并查看报告

上面的job建成后,就可以点击立即构建,执行了。执行完后,点击allure Report查看最终的报告。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯