接口测试
- 介绍
(1)为什么要做接口测试?
- 尽早的进入项目中,后端处理好逻辑后就可以介入测试。
- 发现的问题更加的全面。
- 测试场景很自由很安全。
- 自动化测试:接口自动化、app自动化、ui自动化
(2)什么是接口呢?
接口:提供数据服务和交互的一种形式、通道;接口是有规范的。
前端操作传递通过接口传递到后端,后端返回结果通过接口传达到前端。
接口规范:网络协议://ip:port/path?args=’参数’&args=’参数’
ip地址:对应多个域名,cmd dos界面输入ping+域名可查看。
请求方式:get(一般用于查询)、post(一般用于提交数据)、put(一般上传下载)、delete(一般用于删除)
接口文档:这个接口,用什么方式发请求。(没有接口文档可以自己去抓包)
(3)接口测试的步骤
- 接口地址 登录地址
- 接口参数 账号+密码
- 发请求,请求方式 发请求
- 响应内容回来 响应(登录成功or失败)
- 什么是接口测试?
模拟接口发送请求,请求回来的内容是正确的还是错误的。
- 用代码or工具去做接口测试
测试用接口文档:NowAPI 数据接口服务商
简单代码理解
import requests
#接口地址
url='http://api.k780.com'
#接口参数
data={ 'app' : 'weather.history',
'weaId' : '1',
'dateYmd' : '20220101',
'appkey' : '66717',
'sign' : 'xxx,
}
#发送请求
res =requests.get(url=url,params=data)
#响应内容
print(res.json())
接口测试后,响应回来的结果是不是自己想要的?返回”success”
'''1、接口地址 登录地址
2、接口参数 账号+密码
3、发请求,请求方式 发请求
4、响应内容回来 响应(登录成功or失败)
'''
import requests
#接口地址
url='http://v.juhe.cn/historyWeather/province'
#接口参数
data={
'key':'xxx'
}
#发送请求
res =requests.get(url=url,params=data)
#响应内容
#print(res.json())
#预期结果
exmsg='查询成功'
#实际结果 取success的值
sjmsg=res.json()['reason']
#对比
if exmsg == sjmsg:
print("用例成功")
else:
print("用例失败")
上面写法不友好,只是基础理解。
公司:要求复用性、封装好
数据库
扩展性:生成测试报告,html css js 发送邮件,第三方插件等
用unittext框架改造一下:单元测试框架
好处:管理用例,生成测试报告,断言
#用unittext框架改造一下,单元测试框架,
import unittest
import requests
from ddt import data,ddt,unpack,file_data
@ddt
class TestCase(unittest.TestCase):
#用例执行之前要做的事情
#链接数据库等等
# def setUp(self) -> None:
# pass
#用例执行之后要做的事情 关闭数据库,清理数据库
# def tearDownClass(cls) -> None:
# pass
#测试用例,一个test代表一条用例, 数据不同,数据不写死
#数据如何传输?数据驱动:测试代码和测试数据分离
#改变数据就能改变自动化执行,data专门放数据
#unpack解包
@data(['xxx])
@unpack
def test_LoginSucess(self,key):
url = 'http://v.juhe.cn/historyWeather/province'
data = { 'key':key
}
res = requests.post(url, data=data)
exmsg = '查询成功'
sjmsg = res.json()['reason']
self.assertEqual(exmsg, sjmsg)
#执行用例
if __name__=='__main__':
unittest.main()
使用yaml文件执行用例
- 安装
python3.X只能使用pip install pyyaml 来安装。若使用pip install yaml会报错误
- 使用注意冒号后面要有空格
yaml基本语法
1. yaml的基本格式是 k: v (注意:冒号后面有一个空格,而且这个空格是必须的)
yaml中的字符串默认不用加双引号或者单引号,如果加了双引号或者单引号,则单引号和双引号在yaml中有不同的用法,
""双引号不会转义字符串里面的特殊字符:特殊字符会作为本身想表达的意思
例:"张三\n李四" 会表示出 张三 然后是一个换行 然后才是 李四
'' 单引号会转义字符串里面的特殊字符
例:'张三\n李四' 表示出来的就是一个字符串 张三\n李四
2.使用缩进表示层级关系
3.缩进时不允许使用Tab键,只允许使用空格。
4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
5. 大小写敏感
第一种写法:
user:
userName: 王晓明
userAge: 20
userSex: 男
第二种写法(行内写法):
user: {userName: 王晓明,userAge: 20,userSex: 男}
3.数组、集合(list、set)yaml语法中数组与集合的表现形式是一样的。
用-表示数组中的一个元素
studentArray
-student1
-student2
-student3
第二种写法(行内写法):
studentArray: [student1,student2,student3]
- 结合使用
Yml文件内容:
-
date: '1/1'
key: 'ae3f7ade1b5ee8b0b6476e5c495b35cf'
-
date: '1/2'
key: 'ae3f7ade1b5ee8b0b6476e5c495b35cf'
-
date: '1/2'
key: 'ae3f7ade1b5ee8b0b6476e5c495b35cf1'
代码内容:
import requests
import unittest
from ddt import data,ddt,unpack,file_data
@ddt
class Test(unittest.TestCase):
#def setUp(self) -> None:
# pass'''
# #def tearDownClass(cls) -> None:
# pass'''
#@data(['1/1','xxx'],['1/2','xxx])
#@unpack
# #从yaml去数据放到业务逻辑
@file_data('demo.yaml')
def testdemo(self,date,key):
url='http://v.juhe.cn/todayOnhistory/queryEvent.php'
data ={
'date':date,
'key':key
}
qwmsg = 'success'
es=requests.get(url,params=data)
print(es.json())
exmsg=es.json()['reason']
self.assertEqual(qwmsg,exmsg)
if __name__ =='__main__':
unittest.main()