目录
测试库框架
步骤1、在common文件夹下新建common_api_info.py文件,把所有的api接口做个封装
步骤2、修改common_function.py文件
步骤3、修改test_get_access_token_api.py文件
步骤4、修改test_create_user_tag_api.py文件代码;
步骤5、再执行run_api_tests.py文件,执行所有用例;
测试库框架
与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本(而测试脚本中只是包含调用函数的用例即可)。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。
场景: 在模块化框架中,我们发现常用的获取 token过程由于调用频繁,经常改动导致不好维护,所以做成一个函数进行调用,而其它所有的接口都可能会进行变更;
比如: 用例如下:
获取token---创建标签。
获取token---创建标签---删除刚创建的标签
获取token---创建标签---查询标签进行查询
下面通过测试库框架修改代码,改动的比较大,建议把上方写的项目重新复制一份,做个备份
步骤1、在common文件夹下新建common_api_info.py文件,把所有的api接口做个封装
方法封装,类封装都可以
编写代码:
# encoding: utf-8
# @author: Jeffrey
# @file: common_api_info.py
# @time: 2022/7/26 22:05
# @desc: 测试库封装
import json
#该模块存放所有的接口定义及接口信息
class CommonApiInfo:
def __init__(self,session,hosts):
self.session = session
self.hosts = hosts
def get_access_token_api(self,grant_type,appid,secret):
"""获取token接口信息"""
url_params = {"grant_type": grant_type,
"appid": appid,
"secret": secret}
response = self.session.get(url="https://%s/cgi-bin/token" % self.hosts,
params=url_params)
return response
def create_user_tag_info(self,token_value,tag_name):
'''创建标签接口信息'''
url_params = {"access_token": token_value}
tag_info = { "tag": { "name": tag_name } }
tag_str = json.dumps(tag_info, ensure_ascii=False)
response = self.session.post(url="https://%s/cgi-bin/tags/create" % self.hosts,
params = url_params,
data=tag_str.encode('utf-8'))
return response
# 修改标签接口信息
# 查询标签接口信息
步骤2、修改common_function.py文件
编写代码:
# encoding: utf-8
# @author: Jeffrey
# @file: common_function.py
# @time: 2022/7/26 21:01
# @desc: 模块化框架
import jsonpath
from common.common_api_info import CommonApiInfo
def get_access_token_value(session_obj,hosts):
"""获取access_token的值"""
response = CommonApiInfo(session_obj,hosts).get_access_token_api('client_credential',
'wxf14419077f707856',
'92a113bd4b5ffdc72144740dc7123c99')
# 获取响应json中的access_token的值
token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0]
return token_value
步骤3、修改test_get_access_token_api.py文件
编写代码:
# encoding: utf-8
# @author: Jeffrey
# @file: test_get_access_token_api.py
# @time: 2022/7/24 18:08
# @desc:
# 导入模块顺序:内置模块、第三方模块、自定义模块
import unittest
import requests
import jsonpath
from common import local_config
from common.common_api_info import CommonApiInfo
class TestGetAccessTokenApi(unittest.TestCase):
def setUp(self) -> None:
self.session = requests.session()
self.hosts = local_config.HOSTS
def tearDown(self) -> None:
self.session.close()
def test_case_01(self):
'''[api_case_01] 测试获取access_token能否正常调用'''
response = CommonApiInfo(self.session,self.hosts).get_access_token_api(
'client_credential','wxf14419077f707856','92a113bd4b5ffdc72144740dc7123c99'
)
# 获取响应json中的access_token的值
actual_result = jsonpath.jsonpath(response.json(), "$.access_token")
self.assertTrue(actual_result, "api_case_01 执行失败") #非空,非0 都返回True为真
def test_case_02(self):
'''[api_case_02] 测试获取access_token接口在appid错误时,能否正常处理错误'''
response = CommonApiInfo(self.session,self.hosts).get_access_token_api(
'client_credential','wxf14419077f707','92a113bd4b5ffdc72144740dc7123c99'
)
# 获取响应json中的errcode的值,因为jsonpath返回的是列表,故加上下标0
actual_result = jsonpath.jsonpath(response.json(), "$.errcode")[0]
self.assertEqual(actual_result,40013, "api_case_02 执行失败")
if __name__ == '__main__':
unittest.main(verbosity=2)
查看执行结果:
步骤4、修改test_create_user_tag_api.py文件代码;
编写代码:
# encoding: utf-8
# @author: Jeffrey
# @file: test_create_user_tag_api.py
# @time: 2022/7/24 19:02
# @desc:
import unittest
import requests
import jsonpath
import json
from common import common_function
from common import local_config
from common.common_api_info import CommonApiInfo
class TestCreateUserTagApi(unittest.TestCase):
def setUp(self) -> None:
self.session = requests.session()
self.hosts = local_config.HOSTS
def tearDown(self) -> None:
self.session.close()
def test_case_01(self):
'''[api_case_03] 测试正常进行创建标签接口调用'''
#获 取access_token
token_value = common_function.get_access_token_value(self.session,self.hosts)
# 解决中文乱码问题;模拟post请求时,携带json 数据包含中文发送给服务器会转码
# 方式一:json.dumps()
# 获取创建标签接口
response = CommonApiInfo(self.session,self.hosts).create_user_tag_info(
token_value,'深圳人5'
)
# # 方式二:修改requests中的models.py中的源码,修改完后
# response = self.session.post(url="https://api.weixin.qq.com/cgi-bin/tags/create",
# params=tag_url_params,
# json=tag_boby)
# print(response.json())
# 获取响应json的tag的name值,因为jsonpath返回的是列表,故加上下标0
actual_result = jsonpath.jsonpath(response.json(), "$.tag.name")[0]
self.assertEqual(actual_result,"深圳人5", "api_case_03 执行失败")
if __name__ == '__main__':
unittest.main(verbosity=2)
查看执行结果:
步骤5、再执行run_api_tests.py文件,执行所有用例;
好处: 1、易于维护2、测试用例脚本更多的去关注测试过程而淡化接口细节3、减少代码冗余
以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了
各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!
三连之后我会在评论区挨个私信发给你们~