-
代码实现接口自动化步骤
搭建环境(python+pycharm+requests库)------新建项目APITest----搭建框架目录结构—代码实现
目录结构如下:
api_keyword:提取常用函数
api_case:编写测试用例
data:存放测试需要的数据
config:存放配置文件
report:存放生成的测试报告
tools:存放需要放的第三方插件
log:存放日志文件
run_suit.py:执行测试入口
-
代码实现如下:
#-*-coding:utf8 -*-
'''
定义接口自动化测试的关键字类
'''
import json
import requests
import jsonpath
class Keyword:
#定义get请求方法
def get(self,url,param=None,header=None):
return requests.get(url=url,headers=header,params=param)
#定义post请求方法
def post(self,url,data=None,header=None):
return requests.post(url=url,headers=header,data=data)
#校验字段获取方法
def get_text(self,res,key):
if res is not None:
try:
#将res文本转换成json格式,通过jsonpath解析获取到指定的key的value值
text=json.loads(res)
value=jsonpath.jsonpath(text,'$..{0}'.format(key))
#jsonpath获取的结果是list类型的值,如果获取失败则是false
if value:
#将list转换成string格式
if len(value)==1:
return value[0]
else:
return value
else:
return value
except Exception as e:
return e
else:
return None
#请求参数转换为Json格式
def json_dumps(self,data):
return json.dumps(data)
#-*-coding:utf8 -*-
import unittest
from ddt import ddt,file_data
from api_keyword.Keyword_base import Keyword
from config.readFile import readFile
'''
创建一个UnitTest测试用例管理框架
'''
@ddt
class ApiCase(unittest.TestCase):
#公共部分提取,作为初始化内容
@classmethod
def setUpClass(cls) -> None:
cls.access_token = None
# 实例化需要的内容
cls.kd = Keyword()
cls.url_config = readFile('../config/Config.ini').get_readConfig("url")
# 测试用例
@file_data('../data/login.yaml')
def test_1_api_login(self,**kwargs):
#实例化需要的内容
url = self.url_config + kwargs['path']
#接口测试
res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
#获取登录的token并给access_token赋值
ApiCase.access_token=self.kd.get_text(res.text,'access_token')
#获取需要断言的值
value_success=self.kd.get_text(res.text,'nickname')
value_faile=self.kd.get_text(res.text,'resultMsg')
#断言校验
if "nickname" in res.json()['data'] :
self.assertEqual(first=kwargs['text'],second=value_success,msg='登录成功')
else:
self.assertEqual(first=kwargs['text'],second=value_faile,msg='登录失败')
@file_data('../data/logout.yaml')
def test_2_api_logout(self,**kwargs):
url=self.url_config+kwargs['path']
#把access_token的值赋值给headers
headers=kwargs['headers']
headers['access_token']=self.access_token
#接口测试
res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
value=self.kd.get_text(res.text,'success')
faile_value=self.kd.get_text(res.text,"error")
#断言校验,如果success返回true,则退出成功
if self.kd.get_text(res.text,"success"):
self.assertEqual(first=kwargs['text'],second=value,msg='退出成功')
else:
self.assertEqual(first=kwargs['text'],second=faile_value,msg="accid未传")
@file_data('../data/touristLogin.yaml')
def test_3_api_tourists(self,**k):
url=self.url_config+k['path']
res=self.kd.post(url=url,data=k['data'],header=k['headers'])
value=self.kd.get_text(res.text,'nickname')
#断言nickname的用户是user -0288
self.assertEqual(first=k['text'],second=value,msg='游客token是固定的')
@file_data('../data/changePassword.yaml')
def test_4_api_changePwd(self,**kwargs):
url=self.url_config+kwargs['path']
res=self.kd.post(url=url,data=kwargs['data'],header=kwargs['headers'])
value=self.kd.get_text(res.text,'resultMsg')
self.assertEqual(first=kwargs['text'],second=value,msg='验证码错误')
if __name__ == '__main__':
unittest.main()
-yaml样式
–运行结果