接口自动化测试

  (1)接口自动化

  python/java+requests+unittest框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高

  (2)Web UI功能自动化

  python/java+selenium+unittest+ddt+PO框架来实现 python/java+RFS(RobotFrameWork+Selenium)框架来实现——对于编程要求不高

  (3)App自动化

  python/java+appnium+unittes框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高

  (1)接口自动化是没有界面的,不需要对界面元素定位操作,不需要考虑界面延迟的问题,执行效率更高 (2)接口自动化用的是requests测试库,Web自动化用的selenium测试库 (3)接口自动化的覆盖率可以达到100%(绝大部分的接口都可以实现自动化) Web自动化的覆盖率能达到80-90%算OK(可能会有某些功能是没办法实现自动化的)

  A. 确定业务范围,哪些业务功能的接口可以做自动化——接口自动化的覆盖率可以达到 100%

  B. 时间进度安排,人员分配

  C. 确定自动化测试框架

  D. 准备数据——准备接口用例数据

  E. 编写接口自动化脚本

  (1)、安装python3.x——配置python的环境变量

  (2)、安装PyCharm——python开发工具

  (3)、安装测试库 Requests库—— 提供了丰富的用来发请求,对请求进行处理的API函数 xlrd,xlwt库—— 提供了对Excel文件进行操作的API函数 Pymysql库—— 提供了对Mysql数据库进行操作的API函数 paramsunittest库—— 实现参数化的库 Json库—— 提供了对Json格式的数据进行操作的API函数(python自带的基础库) Re库—— 可以使用这个库中的API函数对HMTL数据进行操作

  我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:

  1、步骤: A、导包import requests B、组织请求参数url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’par = { ‘email’: ‘Jason’, ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘, ‘auto_login’: 0, ‘ajax’: 1} C、发送请求res = requests.post(url, data=par)res = requests.get(url,params=par) D、提取响应对象中的数据,并做断言1、提取响应*body*内容** res.text —— 如果返回的是html格式的数据,使用res.text提取` res.json() —— 如果后台返回的是json格式的数据,则使用这个API函数来提取`2、提取响应头*** res.headers3、提取状态码,响应信息 res.status_code res.reason4、提取cookie值 res.cookies()2、传递请求头header = { ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0’, ‘Accept’: ‘application/xml’,}res = requests.post(url,data=par,headers=header) 3、传递cookie,token值 通过请求头来传递 —— 直接从浏览器上查看cookie值,并传递到后台。header = { ‘Cookie’: ‘PHPSESSID=3724b412550a557825da5528dd6198c6’ }res = requests.post(url,data=par,***headers=heade***r,allow_redirects=False) 发请求的时候通过cookies这个参数来传递import requests#1. 登录,获取cookie值def getCookie(): url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’ par = { ‘email’: ‘Jason’, ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘, ‘auto_login’: 0, ‘ajax’: 1 } res = requests.post(url, data=par) return res.cookies#2. 调用充值接口#2.1 获取cookie值cookie = getCookie()#2.2 发充值请求url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’par = { ‘check_ol_bl_pay’:’on’, ‘money’:1000, ‘bank_id’:0, ‘memo’:234567890, ‘payment’:5,}#发充值请求res1 = requests.post(url,data=par,cookies=cookie,allow_redirects=False) # 自动重定向的,可以取消自动重定向print(res1.status_code)print(res1.reason)print(res1.headers) 先创建一个session对象,所有请求都使用这个session对象来发送import requests#1. 发登录请求url=‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’par={ ‘email’: ‘Jason’, ‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘, ‘auto_login’: 0, ‘ajax’: 1}#创建一个seesion对象,后期使用这个session对象来发请求ses=requests.session()#发登录请求,返回的cookie值会自动化保存到session对象中response1=ses.post(url,data=par)#2. 发充值请求url=‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’par={ ‘check_ol_bl_pay’:’on’, ‘money’:1000, ‘bank_id’:0, ‘memo’:234567890, ‘payment’:5,}response2=ses.post(url,data=par,allow_redirects=False)print(response2.headers)

  (1)、数据驱动——实现接口用例数据与脚本的分离 我们把接口用例数据放入在Excel表格中,因为每一个接口都包含:请求地址,请求方式,请求参数,以及响应数据;所以在Excel表格中按照以下方式来组织我们的接口用例数据,包含以下几个内容: 用例名称,请求地址,请求方式,请求头,请求参数,预期结果(断言) 然后我们会封装一个函数去读取Excel数据,以参数的形式传递到脚本中,具体操作步骤如下:

  安装xlrd库 pip install xlrd 调用xlrd库中的API函数来实现对Excel表格数据的读取#封装一个读取Excel表格数据的函数#对Excel表格数据的读取需要用到一个库——xlrd库import xlrddef get_data(filename,sheetname): #1. 打开Excel文件 workbook=xlrd.open_workbook(filename) #2. 打开Excel文件中的某张表 sheet=workbook.sheet_by_name(sheetname) #3. 读取表中的内容 list=[] for I in range(1,sheet.nrows): data=sheet.row_values(i) list.append(data) return listif __name__==‘__main__’: result=get_data(‘D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’) print(result) 问题解决1工程问题: 1、没有安装xlrd 2、没有把xlrd导入工程

  (2)、unittest框架 作用:用来管理用例,加载用例,执行用例 原理:有几个核心组件 1、测试固件 setUp() 每条用例执行之前,首先会执行这个setUp()方法,在setUp()方法中完成准备初始化工作 比如:连接数据库,后期在将Web UI功能自动化的时候,可以在这里去打开浏览器,配置 tearDown() 每条用例执行完成之后,回收一些资源,比如:关闭数据库,关闭浏览器 2、测试用例 每一条用例需要实现一个用例方法,每个用例方法都必须要以test开头 3、测试套件 执行用例的时候,需要创建测试套件,把用例加入测试套件。 4、加载器 用来加载用例的,把测试用例加入测试套件中 5、执行器 用来执行测试套件中的用例的 如何使用unittest框架来编写用例

  #1. 导包import timeimport unittestimport requestsfrom common.excelUtils import get_dataimport paramunittest#读取excel表格中的数据list=get_data(‘D:\\JMeter\\1947_Project\\cxy-project02\\data\\接口用例数据.xls’,’登录’)#2. 定义一个类,去继承unittest.TestCase@paramunittest.parametrized(*list) # 引用list中的所有数据class FwLogin(unittest.TestCase): def setParameters(self,case_name,url,method,headers,params,assert_info): ‘’’ 有多少条用例,这个函数就会执行多少次,每执行一条用例之前先会执行这个函数,把数据提取出来。 :param case_name: :param url: :param method: :param headers: :param params: :param assert_info: :return: ‘’’ self.case_name=str(case_name) self.url=str(url) self.method=str(method) self.headers=str(headers) self.params=str(params) self.assert_info=str(assert_info) #1. 实现一个用例方法 def test_login_case(self): time.sleep(5) #1. 组织参数 self.headers=eval(self.headers) # 将字符串转化为字典 self.params=eval(self.params) #2. 发请求 if self.method==‘POST’: response=requests.post(self.url,data=self.params,headers=self.headers) else: response=requests.get(self.url,params=self.params,headers=self.headers) #3. 检查,断言 self.check_result(response) def check_result(self,response): ‘’’ 断言 检查结果的 :param response: :return: ‘’’ self.assert_info=eval(self.assert_info) #预期结果 try: self.assertEqual(response.status_code,200,’响应状态码错误’) self.assertEqual(response.reason,’OK’,’响应的响应码错误’) self.assertDictEqual(response.json(),self.assert_info,’响应的正文内容不一致!’) print(‘%s测试用例通过!’ %self.case_name) except AssertionError as e: print(‘%s测试用例不通过!%s’ %(self.case_name,e)) if __name__==‘__main__’: unittest.main()

  想要学习软件测试的朋友可以交流交流

  正在跳转

  自学团是免费加入的,我可以给你提供:

  ①自己收集整理的一些测试学习资料,这些都是网上可以找到的,我觉得相对比较好一点的东西;

  ②在自学团内给你分配一个学习伙伴,让你们互相监督学习;

  ③互相监督打卡学习,算是帮助大家克服拖延症的问题;

  ④一起沟通一些行业信息,算是会对大家不管是学习和就业都会有一些小小的帮助;

  ⑤有需要可以找我帮忙改简历,我比较认可的小伙伴也可以帮忙做一下内推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值