赞
踩
自动化实现:python+requests+unittest+htmltestrunner
一、接口自动化优缺点:
优点:
1.测试复用性好,提升效率
2.维护成本相对UI自动化低一些
3.回归方便
4.可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试
缺点:
1.不能能完全取代手工测试
2.手工测试比自动测试发现的缺陷更多,自动化测试不容易发现新的BUG
二.什么是接口:
通常做的接口测试指的是系统对外的接口,比如你需要从别的系统来获取到或者同步资源与信息, 他们会提供给你一个写好的接口方法供你调用,比如常用的app,用户同步这些在处理数据的时候需要通过接口进行调用。
api接口是最常见的两种接口方式:采用http通信协议,有get 和post请求方法,返回的数据是json类型,
接口测试也可以说是功能测试,通过调用接口从数据库中获取到数据,看是否返回回来,返回正确。
三、 json格式化工具:jsonhandle
使用方法:谷歌浏览器》设置》更多工具》扩展程序》打开开发者工具》直接把包拖入谷歌
四、get请求和post请求的区别
1.get是从服务器上获取数据(例如看到列表页面等),post是向服务器传送数据(登录、注册)什么时候用get,什么时候用post取决于开发
2.get请求接口的请求数据是放在url里面的,post请求接口的请求数据是放在body里面的,get请求可以在浏览器中直接访问,而post请求只能借助工具完成(postman)
五、前端和后端理解(前后端分离)
前端和后端如果说成客户端与服务端比较好理解,在浏览器上打开一个网页,打开一个管理系统,在一个APP上操作,这些都属于前端,他的作用就是显示页面,操作页面,而处理这些业务逻辑功能比如说页面上的非空校验,
业务逻辑功能能都是通过后端来实现的,而前端和后端的交互正是通过接口来交互的。
六、接口的依据:
在一个企业中后端根据需求编写的接口规范文档,接口文档至少包括:
1、接口说明
2、调用url
3、请求方法(get\post)
4、请求参数、参数类型、请求参数说明
5、返回参数说明
七、什么时候开展接口自动化测试
第一个:功能测试前期
第二个:模块稳定系统测试后期(通过编写它做系统线上回归)
八、软件开发流程:
产品需求评审-》评估需求多长时间完成-》开发需求(后端出接口+前端写页面+测试写用例)-》接口功能测试(自动化)-》业务功能交互-》系统测试(自动化UI/性能-》兼容测试-》上线-》接口自动化回归
九、接口自动化主要验证点:
1.状态码是否是200(代表这个接口已经通了)
2.校验关键字段(断言)
3.校验可变得值判断为空
十、接口自动化实现
核心库:requests
第一种:命令行安装:pip install requests web pip install selenium
第二种:在pycharm中安装->settings->project->选择你的PYTHON点击+输入“requests”安装
第三种:直接写 import requests,没有安装会标红,然后install
关键字段梳理:
import requests 导入reuqest模块
get请求方式1,参数在url中:
r = requests.get('url') 发送get请求
例如:
r=requests.get("https://selectcar.yiche.com/selectcarforapp?mid=7&s=4&page=1&pagesize=20&cityId=201")
print(r.json()) #打印json格式
get请求方式2,参数写到字典中传入:
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('url', params=payload)
案例:
paydata = {'mid': 9, 's': 4,'page':1,"pagesize":2,'cityId ':201}
#params使用 params 关键字接受参数
rp=requests.get("https://selectcar.yiche.com/selectcarforapp", params=paydata);
print(rp.json())
常见参数:
r.url 打印url地址
r.text 打印服务器响应的内容
r.encoding 打印编码格式
r.content 打印请求响应体
r.cookies 获取返回的cookie
r.json() 打印json格式
r.status_code 响应状态码
r.headers 响应头信息
timeout意思是:如果这个接口请求到服务器响应回来的内容超过5S就会报错
断言: self.assertEqual(name,"xxx")
获取某一个节点的值断言:
xx['xx']['xx']获取节点值
cc=rp.json();
name=cc['data']['resList'][0]['name']
print(name)
post请求:
payload = {'key1': 'value1', 'key2': 'value2'}
请求方法:get post json格式
json格式请求:
import json
# 如果需要增加http头部,只需要传递字典给headers即可
head={"Content-Type":"application/json"}
payload = {'some': 'data'}
r = requests.post(url, json=payload,headers=head)
实例:
data={"phone":"14050000000",
"password":"e10adc3949ba59abbe56e057f20f883e",
"messageCode":"",
"source":"2",
"loginType":1}
图片上传请求:
# 上传图片的方法
files= {
'file':('6.png',open('d:/6.png','rb'),'image/jpeg')}
r=requests.post(url,files=files)
7. unitest如何执行多条用例:
需要使用:
# unittest.main() #使用main()直接运行时,将按case的名称顺序执行
suite = unittest.TestSuite()
suite.addTest(demo.MyTestCase('test_01')) # 将需要执行的case添加到Test Suite中,没有添加的不会被执行
suite.addTest(demo.MyTestCase('test_02'))
suite.addTest(demo.MyTestCase('test_03'))
suite.addTest(demo.MyTestCase('test_04'))
suite.addTest(demo.MyTestCase('test_05'))
unittest.TextTestRunner().run(suite) # 将根据case添加的先后顺序执行
8.接口自动化用例
9.整合报告
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。