Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架_python+pytest(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

     response_data = None
     try:
         get_name = test_case_data['config']['name']
         get_url = base_url + test_case_data['config']['url']
         get_method = test_case_data['config']['method']
         get_headers = test_case_data['config']['headers']
         get_cookies = test_case_data['config']['cookies']
     except Exception as e:
         logger.exception('获取用例基本信息失败,{}'.format(e))
     try:
         get_case_name = case_data['name']
         get_case_params = case_data['params']
     except Exception as e:
         logger.exception('获取测试用例信息失败,{}'.format(e))
     with allure.step("请求接口:%s,请求地址:%s,请求方法:%s,请求头:%s,请求Cookies:%s" % (
             get_name, get_url, get_method, get_headers, get_cookies)):
         allure.attach("接口用例描述:", "{0}".format(get_case_name))
         allure.attach("接口用例请求参数:", "{0}".format(get_case_params))
     logger.info(
         '请求接口名:%r,请求地址:%r,请求方法:%r,请求头:%r,请求Cookies:%r' %\ 

**1.4、Excel数据处理**


1.4.1、Excel测试用例


![](https://img-blog.csdnimg.cn/img_convert/a2d00fe92863624c4f784518f76c6c49.png)


  测试用例中维护在Excel文件中,类中定义如何获取Excel中的相关数据(如获取某个单元格的内容,获取单元格的行数,以及将数据写入Excel中等操作)。


  handle\_exceldata.py部分源码



1 class OperationExcel:
2 def init(self, file_name=None, sheet_id=None):
3 if file_name:
4 self.file_name = file_name
5 self.sheet_id = sheet_id
6 else:
7 self.file_name = ‘’
8 self.sheet_id = 0
9 self.data = self.get_data()
10
11 # 获取sheets的内容
12 def get_data(self):
13 data = xlrd.open_workbook(self.file_name)
14 tables = data.sheets()[self.sheet_id]
15 return tables
16
17 # 获取单元格的行数
18 def get_lines(self):
19 tables = self.data
20 return tables.nrows
21
22 # 获取某一个单元格的内容
23 def get_cell_value(self, row, col):
24 return self.data.cell_value(row, col)


**1.5、Json数据处理**



> 
> 1.5.1、Json测试用例
> 
> 
> 



1 {
2 “config”:{
3 “name”:“post接口名”,
4 “url”:“/langdetect”,
5 “method”:“POST”,
6 “headers”:{
7 “Content-Type”:“application/json”
8 },
9 “cookies”:{
10
11 }
12 },
13 “testcase”:[
14 {
15 “name”:“测试用例1”,
16 “params”:{
17 “query”:“测试”
18 },
19 “validate”:[
20 {
21 “check”:“status_code”,
22 “comparator”:“eq”,
23 “expect”:“200”
24 }
25 ]
26 },
27 {
28 “name”:“测试用例2”,
29 “params”:{
30 “query”:“python”
31 },
32 “validate”:[
33 {
34 “check”:“msg”,
35 “comparator”:“eq”,
36 “expect”:“success”
37 }
38 ]
39 }
40 ]
41 }


1.5.2、Json用例处理


  获取Json文件中里具体字段的值。


  handle.json.py部分源码



1 class HandleJson:
2 # 读取json文件
3 def load_json(self, file_name):
4 if file_name == None:
5 file_path = “”
6 else:
7 file_path = file_name
8 try:
9 with open(file_path, encoding=‘UTF-8’) as f:
10 data = json.load(f)
11 return data
12 except Exception:
13 print(“未找到json文件”)
14 return {}
15
16 # 读取json文件里具体的字段值
17 def getJson_value(self, key, file_name):
18 if file_name == None:
19 return “”
20 jsonData = self.load_json(file_name)
21 if key == None:
22 getJsonValue = “”
23 else:
24 getJsonValue = jsonData.get(key)
25 return getJsonValue


**2、基类封装**


**2.1、请求基类封装**


  接口支持Get、Post请求,调用requests请求来实现接口的调用与返回。接口参数包括,接口地址、接口请求参数、cookie参数、header参数。



1 class BaseRequest:
2
3 def send_get(self, url, data, header=None, cookie=None):
4 “”"
5 Requests发送Get请求
6 :param url:请求地址
7 :param data:Get请求参数
8 :param cookie:cookie参数
9 :param header:header参数
10 “”"
11 response = requests.get(url=url, params=data, cookies=cookie, headers=header)
12 return response
13
14 def send_post(self, url, data, header=None, cookie=None):
15 “”"
16 Requests发送Post请求
17 :param url:请求地址
18 :param data:Post请求参数
19 :param data:Post请求参数
20 :param cookie:cookie参数
21 :param header:header参数
22 “”"
23 response = requests.post(url=url, json=data, cookies=cookie, headers=header)
24 return response
25
26 # 主函数调用
27
28 def run_main(self, method, url, data, header, cookie=None):
29 try:
30 result = ‘’
31 if method.upper() == ‘GET’:
32 result = self.send_get(url, data, header, cookie)
33 elif method.upper() == ‘POST’:
34 result = self.send_post(url, data, header, cookie)
35 return result
36 except Exception as e:
37 logger.exception(‘请求主函数调用失败:{}’.format(e))


**3、接口测试用例编写**


**3.1、接口测试用例**


  引用Pytest来进行接口的单元测试,通过JSON中多个测试用例来做为参数化数据驱动。结合Allure制定相应接口的测试报告。在接口返回断言之前,我们先进行该接口的契约测试,


我们采用的是Pactverity的全量契约校验测试。当契约测试通过时,我们再进行返回参数的相关校验测试。


  test\_getRequestJson.py部分源码



1 @allure.feature(‘测试GET请求模块’)
2 class TestRequestOne():
3 @allure.title(‘测试标题’)
4 @allure.testcase(‘测试地址:https://www.imooc.com’)
5 @pytest.mark.parametrize(‘case_data’, testCaseData[‘testcase’])
6 def test_requestOne(self, case_data):
7 try:
8 api_response = apiRequest.api_request(baseurl, testCaseData, case_data)
9 api_response_data = api_response.json()
10 # pactverity——全量契约校验
11 config_contract_format = Like({
12 “msg”: “成功”,
13 “result”: 0,
14 “data”: EachLike({
15 “word”: Like(“testng”)
16 })
17 })
18 mPactVerify = PactVerify(config_contract_format)
19 try:
20 mPactVerify.verify(api_response_data)
21 logger.info(
22 ‘verify_result:{},verify_info:{}’.format(mPactVerify.verify_result, mPactVerify.verify_info))
23 assert mPactVerify.verify_result == True
24 except Exception:
25 err_msg = ‘契约校验错误’
26 logger.exception(‘测试用例契约校验失败,verify_result:{},verify_info:{}’.format(mPactVerify.verify_result,
27 mPactVerify.verify_info))
28 try:
29 for case_validate in case_data[‘validate’]:
30 logger.info(‘断言期望相关参数:check:{},comparator:{},expect:{}’.format(case_validate[‘check’],
31 case_validate[‘comparator’],
32 case_validate[‘expect’]))
33 comparatorsTest.comparators_Assert(api_response, case_validate[‘check’],
34 case_validate[‘comparator’], case_validate[‘expect’])
35 logger.info(‘测试用例断言成功’)
36 except Exception as e:
37 logger.exception(‘测试用例断言失败’)
38 except Exception as e:
39 logger.exception(‘测试用例请求失败,原因:{}’.format(e))


**3.2、主运行**


  运用Pytest和Allure的特性,命令行运行测试用例文件夹,并生成对应的allure测试报告。



1 if name == “main”:
2 pytest.main([‘-s’, ‘-v’, ‘test_case/testRequest/’, ‘-q’, ‘–alluredir’, ‘reports’])


**4、Allure2测试报告**


  当我们运行主函数时,并生成对应的测试用例报告时,我们可以看到在该文件夹中会生成对应的json文件的测试报告。将json文件的测试报告转换成html形式的。命令如下


  reports是json格式测试报告存放的目录位置,allure\_reports是html测试报告文件生成的目录位置。allure命令如下。



1 allure generate reports -o allure_result/


  项目根目录下的allure\_reports文件,存放的是allure生成的测试报告。可看出文件下有一个HTML文件,可通过Python的编辑器Pycharm来打开该HTML文件(测试报告),


或可通过allure命令来打开该HTML,展示HTML测试报告。如下所示。


测试报告文件,HTML测试报告如下。


![](https://img-blog.csdnimg.cn/img_convert/1b3fd3696db166b7f868924e44065441.png)


allure命令打开HTML测试报告。命令如下所示。



1 allure open allure_result/


如下图所示。


![](https://img-blog.csdnimg.cn/img_convert/8e6b1a616d0a0f064e48559a7190b890.png)


打开生成的HTML测试报告如下图所示。


![](https://img-blog.csdnimg.cn/img_convert/e4cca90f3936e47627b4b4cc3b646a47.png)


**5、Jenkins集成**


  Allure+Jenkins的分享,我之前在Pytest+Allure+Jenkins的博客中已经分享过了。这块可以出门左转看看。前期的准备就不在这里重复说明了。我们就直接来上手创建Item进行相关配置。


  General中GitHub项目地址的配置,将自己项目的Git复制至项目URL处。如下图所示。


![](https://img-blog.csdnimg.cn/img_convert/ffb2b6391e2ddcb4583d4bbbd36bcbd5.png)


   源码管理设置。勾选Git,填写相应的项目Git地址,Git项目权限所有者,以及对应的拉取代码的分支。如下图所示。


![](https://img-blog.csdnimg.cn/img_convert/034cdfbbb461845a12c6fe0711891a45.png)


   配置构建命令。选择“执行windows批处理命令”,用python运行主函数运行脚本,命令如下图所示。



![img](https://img-blog.csdnimg.cn/img_convert/8abb60c66fc191613b52c76938999c12.png)
![img](https://img-blog.csdnimg.cn/img_convert/59d802b917683b26b4a88305ba75e7ef.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

主函数运行脚本,命令如下图所示。



[外链图片转存中...(img-VT1PUbXP-1715279790827)]
[外链图片转存中...(img-fMyePiVy-1715279790828)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个接口自动化测试框架可以使用以下工具和技术: 1. Python:作为主要开发语言,可以使用Python来编写测试脚本和测试用例。 2. Pytest:一款功能强大的Python测试框架,可以用于编写和运行测试用例,并提供丰富的断言和报告功能。 3. Allure:一个开源的测试报告生成工具,可以生成美观且易于理解的测试报告,支持多种语言和框架。 4. Git:版本控制工具,用于管理和同步测试代码。 5. Jenkins:一个持续集成和持续交付工具,可以自动化运行测试用例并生成测试报告。 6. Docker:容器化平台,可以用于创建和管理测试环境,提供一致的运行环境。 下面是搭建接口自动化测试框架的步骤: Step 1: 创建项目结构 在本地创建一个目录作为项目根目录,然后在根目录下创建以下子目录: - `tests`:存放测试脚本和测试用例; - `reports`:存放测试报告; - `config`:存放配置文件; - `utils`:存放一些工具类和函数。 Step 2: 编写测试用例 在`tests`目录下编写测试脚本和测试用例。可以使用Pytest来组织和执行测试用例,使用断言来验证测试结果。 Step 3: 配置Allure报告 在`config`目录下创建一个`pytest.ini`文件,配置Allure报告的相关参数,例如报告保存路径、报告标题等。 Step 4: 运行测试用例 使用Pytest运行测试用例,并生成Allure报告。可以使用命令行或者集成到Jenkins中进行自动化执行。 Step 5: 集成GitJenkins 将项目代码托管到Git仓库中,并在Jenkins中配置相关任务,使其在代码提交后自动触发测试用例的运行和报告的生成。 Step 6: 创建Docker镜像(可选) 使用Docker将测试环境打包成镜像,方便部署和维护。 一些可能出现的问题和解决方法: 1. 安装依赖:在搭建过程中,可能会遇到安装依赖包的问题。可以使用pip来安装所需的Python包,并注意版本兼容性。 2. 配置问题:在配置AllureJenkins时,可能会遇到配置不正确或缺少必要参数的问题。可以参考官方文档或者搜索解决方案来解决这些问题。 3. 报告生成失败:如果生成Allure报告失败,可以检查相关依赖是否安装正确,以及路径和权限是否设置正确。 4. 测试环境问题:如果测试用例在不同环境中运行时出现问题,可以考虑使用Docker来创建一致的测试环境,或者在测试用例中添加环境适配代码。 相关问题: 1. 除了Allure,还有哪些常用的测试报告生成工具? 2. 如何在Pytest中使用断言来验证测试结果? 3. 如何在Jenkins中配置任务来触发自动化测试? 4. 除了接口自动化测试,还有哪些类型的自动化测试可以使用Python实现?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值