python+unittest+requests+HTMLRunner搭建接口测试框架,执行用例请求多个不同请求方式的接口_htmltestrunner部署

20 def set_config(self,field,key,value):
21 # 向配置文件中写入配置信息
22 fb = open(configPath,‘w’)
23 self.cf.set(field,key,value)
24 self.cf.write(fb)

③ 从配置文件中获取到接口的基本url后,根据不同的接口请求方式读取请求体或其他参数信息,参数信息从excel中读取,因此文件readExcel.py用于读取并返回excel文件中内容,或写入Excel的方法

1 import xlrd
2 import xlutils.copy
3 from Base.readConfig import ReadConfig
4 import time
5
6 class ReadExcel:
7
8 def init(self,section,field,sheet):
9 # 打开工作表,并定位到sheet
10 data_address = ReadConfig().get_config(section,field)
11 workbook = xlrd.open_workbook(data_address)
12 self.table = workbook.sheets()[sheet]
13
14
15 def get_rows(self):
16 # 获取excel行数
17 rows = self.table.nrows
18 return rows
19
20 def get_cell(self,row,col):
21 # 获取单元格数据
22 cell_data = self.table.cell(row,col).value
23 return cell_data
24
25 def get_col(self,col):
26 # 获取整列数据
27 col_data = self.table.col_value(col)
28 return col_data
29
30 class WriteExcel:
31 def init(self,section,field,sheet):
32 # 打开工作表
33 self.address = ReadConfig().get_config(section,field)
34 self.workbook = xlrd.open_workbook(self.address)
35 self.wf = xlutils.copy.copy(self.workbook)
36 self.ws = self.wf.get_sheet(sheet)
37
38 def set_cell(self,row,col,value):
39 #设置单元格数据
40 self.ws.write(row,col,value)
41
42 def save_excel(self,filename,format):
43 #获取当前时间
44 self.time = time.strftime(“%Y%m%d%H%M%S”, time.localtime())
45 #生成文件的文件名及格式
46 self.report = filename + ‘_’ +self.time + format
47 #保存文件
48 self.wf.save(self.report)

④ 将获取接口的url、请求头、参数等方法封装成类并写入base.py中,用于测试框架中测试集的直接调取

1 from Base.readConfig import ReadConfig
2 from Base.readExcel import ReadExcel
3
4 # 实例化
5 readexcel = ReadExcel(‘DATABASE’,‘data_address’,0)
6
7 class BasePage(object):
8 def init(self, selenium_driver):
9 self.driver = selenium_driver
10
11 def get_api(self, row, col):
12 # 获取url
13 self.base_url = ReadConfig().get_config(‘HTTP’, ‘base_url’)
14
15 # 获取excel中的接口地址,与url进行拼接
16 self.url = self.base_url + readexcel.get_cell(row, col)
17 print(self.url)
18 return self.url
19
20 def get_cell(self, row, col):
21 # 获取excel单元格数据,获取接口请求的参数
22 self.cell = readexcel.get_cell(row, col)
23 return self.cell

⑤ 从base.py文件获取到请求地址后,需要组合不同类型的请求方式,如get请求直接将参数与地址进行拼接,或post请求以json数据格式等为请求体请求接口,然后再获取接口对象,得到接口返回的数据,此过程涉及的方法封装到request_way.py(注:该实例get请求返回数据格式为jsonp,因此需要jsonp格式数据转换为json格式的方法)

1 from Base.readExcel import ReadExcel
2 from base import BasePage
3 import requests
4 import urllib.parse
5 import json
6 import re
7
8 # 实例化
9 readexcel = ReadExcel(‘DATABASE’,‘data_address’,0)
10
11 # jsonp格式数据转换为json格式
12 def jsonp_to_json(_jsonp):
13 # 解析jsonp数据格式为json
14 try:
15 return json.loads(re.match(“.?({.}).*”, _jsonp, re.S).group(1))
16 except:
17 raise ValueError(‘Invalid Input’)
18
19 class RequestPage(BasePage):
20 # post方式请求,json格式为请求体
21 def post_requests(self, url, i):
22 # 定义请求数据,获取excel中参数信息赋值给data,以json格式拼接好数据
23 data_1_json = json.dumps(BasePage(self.driver).get_cell(i, 4))
24 data_2_json = json.dumps(BasePage(self.driver).get_cell(i + 1, 4))
25 data = “{” + data_1_json + “:” + data_2_json + “}”
26 print(data)
27 # 打开请求,获取对象
28 response = requests.post(url, data)
29 # 打印状态码
30 print(response)
31 return response
32
33 # get方式请求
34 def get_request(self, url, j):
35 # 定义请求数据,获取excel中参数信息赋值给values
36 #values = {}
37 values = BasePage(self.driver).get_cell(j, 4)
38 # 如果参数不止一个则对请求数据进行编码拼接’&’
39 #data = urllib.parse.urlencode(values)
40 # 将数据与url进行拼接
41 req = url + ‘?’ + values
42 print(req)
43 # 打开请求,获取对象
44 response = urllib.request.urlopen(req)
45 # 打印Http状态码
46 print(response.status)
47 # 读取服务器返回的数据,对HTTPResponse类型数据进行读取操作,bytes格式数据编译成中文编码
48 the_page = response.read().decode(“unicode_escape”)
49 # 将返回的bytes格式数据先转换成str,再将返回的jsonp格式数据转换成json格式
50 the_page = jsonp_to_json(str(the_page))
51 return the_page

⑥ 得到接口实际返回结果后,需要与预期结果做比对,判断用例执行结果,所以封装校验类到check.py文件。校验方式其一是校验json数组内每个数值是否一致,其二是直接简单校验数组中的status值和message是否返回正确

1 from base import BasePage
2 from Base.readExcel import WriteExcel
3
4 # 实例化
5 writeexcel = WriteExcel(‘DATABASE’,‘data_address’,0)
6
7 class CheckPage(BasePage):
8 # 校验json数组内每个值是否一致
9 def check_value(self, i, actualresult, expectresult):
10 # 遍历字典的值value,并将value赋值给实际接口数据的值
11 for value in actualresult.values():
12 actualresult_value = value
13 # 遍历字典的值value,并将value赋值给excel中预期数据的值
14 for value in expectresult.values():
15 expectresult_value = value
16 # 如果实际接口返回的每个键值与excel中预期返回的数据的每个键值一样,则接口测试用例执行通过,如果不是则打印预期结果和实际结果,可比较差异
17 if actualresult_value == expectresult_value:
18 writeexcel.set_cell(i, 8, ‘SUCCESS’)
19 print(“接口用例执行结果通过”)
20 else:
21 writeexcel.set_cell(i, 8, ‘FAILURE’)
22 writeexcel.set_cell(i, 7, str(actualresult))
23 print(‘第’, i + 1, ‘行用例执行失败:预期结果是’, expectresult, ‘实际结果是’, actualresult)
24
25 # 保存测试报告
26 writeexcel.save_excel(‘testreport’, ‘.xls’)
27
28
29 # 校验json数组中的status值和message是否返回成功
30 def easy_check_value(self, i, actualresult,expectresult):
31 # 判断实际接口值是否状态码和消息返回成功
32 if actualresult[‘status’] == 1 and actualresult[‘message’] == ‘完成’:
33 writeexcel.set_cell(i, 8, ‘SUCCESS’)
34 print(‘第’, i+1, ‘行用例执行结果正确,用例通过’)
35 else:
36 writeexcel.set_cell(i, 8, ‘FAILURE’)
37 writeexcel.set_cell(i, 7, str(actualresult))
38 print(‘第’, i + 1, ‘行用例执行失败:预期结果是’, expectresult, ‘实际结果是’, actualresult)
39
40 # 保存测试报告
41 writeexcel.save_excel(‘testreport’, ‘.xls’)

⑦ 最后编写测试集 testcase.py,其中用例包含有执行post和get方式的请求,增加用例可直接在该文件继续添加编写

1 import unittest
2 from selenium import webdriver
3 from Base.readConfig import ReadConfig
4 from base import BasePage
5 from requests_way import RequestPage
6 from check import CheckPage
7 from packages.HTMLTestRunner import HTMLTestRunner
8
9 driver = webdriver.Chrome(ReadConfig().get_config(‘DATABASE’, ‘driver’))
10
11 class SmokeTest(unittest.TestCase):
12 #初始化
13 def setUp(self):
14 self.driver = driver
15
16 def test_case_10(self):
17 “”“以json格式数据为请求体的post方式接口请求”“”
18 # 获取url
19 self.url = BasePage(self.driver).get_api(1,1)
20
21 # 将接口实际返回数据转换为json可序列化,使用json.dumps()时需要对象相应的类型是json可序列化的
22 i = 3
23 actualresult = RequestPage(self.driver).post_requests(self.url, i).json()
24
25 # 获取excel中的预期结果
26 expectresult = eval(BasePage(self.driver).get_cell(i, 6))
27
28 # 校验实际接口返回结果和用例预期结果是否一致(校验json数组内每个值是否一致)
29 CheckPage(self.driver).check_value(i, actualresult, expectresult)
30
31 def test_case_11(self):
32 “”“get方式接口请求”“”
33 # 获取url
34 self.url = BasePage(self.driver).get_api(8, 1)
35
36 # 获取接口实际返回值与excel中的预期结果
37 j = 8
38 actualresult = RequestPage(self.driver).get_request(self.url, j)
39 expectresult = eval(BasePage(self.driver).get_cell(j, 6))
40
41 # 校验实际接口返回结果和用例预期结果是否一致(校验json数组中的status值和message是否返回成功)
42 CheckPage(self.driver).easy_check_value(j, actualresult, expectresult)
43
44 # 释放资源
45 def test_case_12(self):

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

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

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

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-4Ake4mnQ-1712908620114)]

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

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pythonunittest库提供了一种基于单元测试的测试框架,是一个方便易用的Python测试框架。使用unittest库进行接口自动化测试可以提高测试效率和质量,本文将分享如何使用Python unittest搭建接口自动化测试框架。 第一步:安装Python unittest库 首先需要安装Python unittest库,Python unittest库是默认安装在Python中的,无需单独安装。 第二步:安装requests模块 接口自动化测试需要使用requests模块来发送HTTP请求、获取响应等操作,因此需要安装requests模块。使用pip安装requests命令如下: pip install requests 第三步:编写测试用例 使用unittest框架编写测试用例,首先需要导入unittest库并创建测试类,编写测试方法,方法名必须以test开头,并使用assert断言方法进行验证。例如: import unittest import requests class TestApi(unittest.TestCase): def test_get_users(self): url = 'http://localhost:8080/api/users' res = requests.get(url) self.assertEqual(res.status_code, 200) self.assertIsNotNone(res.json()) 第四步:执行测试用例 使用unittest框架执行测试用例,使用unittest.main()方法运行所有测试用例。例如: if __name__ == '__main__': unittest.main() 执行测试用例后,将输出测试结果,包括测试用例总数、成功数、失败数等。 第五步:持续集成 持续集成可以帮助实现自动化测试,可以将上述步骤集成到自动化测试框架中,提高测试效率和质量。使用持续集成工具,例如Jenkins,可以实现自动化测试的调度和执行,定期输出测试报告,是测试自动化化的不二选择。 在以上步骤中,请求地址和验证方法需要根据具体需求进行更改,但是编写测试用例的方法是类似的,熟练掌握unittest库可以快速搭建接口自动化测试框架,提高测试效率和质量。 ### 回答2: Python unittest requests 接口自动化测试框架搭建教程博客是指一篇博客文章,介绍如何使用Python unittestrequests搭建接口自动化测试框架。该教程博客有如下几个方面: 1. 简单介绍Python unittestrequests库,以及它们在接口自动化测试中的使用; 2. 详细讲解如何安装Python unittestrequests库,并编写测试用例; 3. 讲解如何通过使用Python unittest的setUp()和tearDown()方法,在测试用例执行前后进行一些操作,以便更好地进行测试; 4. 介绍如何运行测试用例,并查看测试结果,以及如何进行测试报告生成; 5. 提供一些实例,展示如何使用Python unittestrequests搭建接口自动化测试框架。 通过这篇教程博客,读者可以学习如何使用Python unittestrequests搭建接口自动化测试框架,并且能够快速了解并掌握这种接口自动化测试方法的流程和基本方法。此外,该教程博客也提供一些实例,帮助读者更好地理解和应用这种方法。因此,这篇教程博客对于想要学习接口自动化测试以及深入了解Python unittestrequests库的读者来说,是一篇非常有价值的文章。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值