一、
pip install 安装pytest,requsets,jsonpath等
二、
主要目录结构
三、
3.1api包
test_tryRunNewApi.py
import requests
class test_tryRunNewApi:
def login(self,number, password):
headers = {"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"}
url = "http://localhost:8081/user//test_softwareTest"
_data = {
"number": number,
"password": password
}
# 拿到后端返回的json格式的文本,用.json()反序列化为对象 或list
res = requests.post(url=url, headers=headers, data=_data).json()
return res
3.2data包
test_tryRunNew.json
[
{"case_name": "验证运行通的模板1",
"number": "200",
"password": "222"},
{"case_name": "验证运行通的模板2",
"number": "200",
"password": "444"},
{"case_name": "验证运行通的模板3",
"number": "200",
"password": "666"}
]
gongju.py
import json
import jsonpath
class gongju:
# 读取json的data,做参数化
def read_json_data(self,file):
#为什么util文件放在其他地方,这里用相对路径有问题 ?。
# 用json.load()轮子 从文件中读取并反序列化为 对象或list(是对象还是list,看你json文本是哪种
f=open(file, "r", encoding="utf-8")
jsonData = json.load(f)
f.close()
# list对象数组 处理转化成[(),()],因为参数化接收是要这种元组数组的格式。
result_list = []
for case_data in jsonData:
result_list.append(tuple(case_data.values()))
return result_list
#一个接口中,每组预期的通用想要的断言内容
def same_assert(self,res,except_number):
#断言整体json里面的其中一对数据
#取list值,直接跟[] 不要.[]
assert jsonpath.jsonpath(res, '$.number')[0] == except_number
'''
if __name__ == '__main__':
pytest.main(["-s"])
#utils =utils()
print(".....")
print(utils.read_json_data("test_tryRunNew.json"))
'''
3.3cases包
test_tryRunNew.py
# 目的,测试运行一个简单的pytest用例 运行起来
# 不能用json提交,只能用表单提交才不出错,否则传值为null。 ztm鸡肋。 headers = {"Content-Type": "application/json"}
# spring boot 响应体数据格式 text/html。 为啥不是json格式? 当前不需要管先。
# #响应为啥只要返回值,没有响应状态码那些。??。 好像是自定义返回内容来加的。
#加类的话,出来不了运行按钮,运行不了用例先不管。 类方法没有class不能用,直接用创造对象直接调也方便。
#数据文件 跟转化工具放一起也没问题。 所以小问题:json文件地址为啥要同一文件下才可以。 而且main主入口统一执行项目下的测试,也会出鸡肋问题。
import pytest
from api import test_tryRunNewApi
from data.gongju import gongju
from api.test_tryRunNewApi import test_tryRunNewApi
@pytest.mark.parametrize("case_name,number, password", gongju().read_json_data('../data/test_tryRunNew.json'))
def test_login_01(case_name,number, password):
res = test_tryRunNewApi().login(number,password)
print("响应结果: ")
print(res)
#list =jsonpath.jsonpath(res, '$.number') print(list[0]).
#每组预期的通用想要的断言内容,例如状态码。直接调取通用断言
gongju().same_assert(res,'200')
# 每组预期的特点断言,例如实体数据里的内容
#????。每组预期的特点断言。 每组预期值都不一样,循环复用执行时怎么选择性断言呢,例如@(第1次)assert
3.4cinfig配置文件
config.py
import os.path
BASE_URL="http://192.168.43.102:8081"
BASE_PATH=os.path.dirname(os.path.abspath(__file__))
3.5main主程序文件
main.py
import pytest
if __name__ == '__main__':
pytest.main(['-vs'])
print("zzzzzzzzzzzzzzzz")
总结上面内容: 接口自动化测试的 封装复用,发请求,断言,这些主流程已完成。其他非主能顺势完成的 像做日志,生成测试报告还没做。