美文网首页
接口自动化测试,二

接口自动化测试,二

作者: 一撇一捺_fa9c | 来源:发表于2023-03-25 10:30 被阅读0次

一、主入口,
"""
目标:
1、搜索组装测试套件
2、运行测试套件并生成测试报告
"""
import time
导包 unittest HTMLTestRunner time
import unittest
from tools.HTMLTestRunner import HTMLTestRunner
import requests
import json

第一步:组装测试套件
suite = unittest.defaultTestLoader.discover("./case", pattern="test*.py")
第二步:指定报告存放路径及文件名称
file_path = "./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))
第三步:运行测试套件并生成测试报
with open(file_path,"wb")as f:
HTMLTestRunner(stream=f).run(suite)

二、api文件夹,

"""
实现分类接口的封装
"""
导包
import requests
from run_suite import test_post_login
新建类 登录接口对象
class ApiBase(object):
新建登录方法
def api_post_base(self,url,status,pid,name):
#定义headers
headers = {"Content-Type":"application/json",
"Authorization":test_post_login()['token']}
#定义data
data={"status":status,"pid":pid,"name":name}
#调用post并且返回对象
return requests.post(url,headers=headers,json=data)

三、case文件夹,
"""
登录业务层实现
"""
导包 unitetest apilogin
import requests
import unittest
from api.api_base import ApiBase
from parameterized import parameterized
from tools.read_json import ReadJson
读取函数
def get_data():
data=ReadJson("base.json").read_json()
arr=[]
arr.append((data.get("url"),
data.get("status"),
data.get("pid"),
data.get("name"),
data.get("expect_result"),
data.get("status_code")))
return arr
新建测试类
class Testbase(unittest.TestCase):
新建方法
@parameterized.expand(get_data())
def test_base(self,url,status,pid,name,expect_result,status_code):
# url = "http://192.168.24.1:5568/api/login"
# username = "yanghua"
# password = "yanghua123456"
s = ApiBase().api_post_base (url,status,pid,name)
self.assertEqual(expect_result,s.json()['msg'])
self.assertEqual(status_code,s.status_code)

if name == 'main':
unittest.main()

四、data文件夹,

{
"url":"http://192.168.5.1:5570/admin/category/base",
"status":"1",
"pid": "0",
"name":"sssssaf123777",
"expect_result":"名称重复",
"status_code":200
}

五、tools文件夹,

导包
import json
使用参数替换静态文件名
class ReadJson(object):
def init(self, filename):
self.filename="./data/"+filename
def read_json(self):
with open(self.filename,"r",encoding="utf-8")as f:
#调用load方法加载文件流
return json.load(f)

"""
问题:
1、未经封装的无法在别的模块使用
2、数据存储有好几个,如果写死,在读取别的文件时无法使用
3、预期格式为列表嵌套元祖[(url,mobile,code)]
解决:
1、进行封装
2、使用参数化替换静态写死的文件名
3、读取字典里面的内容添加到新的数组中
"""
if name == 'main':
data=ReadJson("login.json").read_json()
print(data)
arrs=[]
arrs.append((data.get("url"),
data.get("username"),
data.get("password"),
data.get("expect_result"),
data.get("status_code")
))
print(arrs)

六、正则表达式,
1、登录接口返回值
return r2.url
2、正则表达式提取
def get_postid(self, r2_url)
import re
postid = re.findall(r"postid=(.+?)&", r2_url)
print postid # 这里是 list []
提取为字符串
print postid[0]
return postid[0]
3、其它接口引用
def del_tie(self, postid):
'''删除帖子'''
del_json = {"postId": postid}
del_url = "https://i.cnblogs.com/post/delete"
r3 = self.s.post(del_url, json=del_json, verify=False)
print r3.json()["isSuccess"]
return r3.json()

七、mock模拟数据

from unittest import mock
import unittest
import temple

class Test_zhifu_statues(unittest.TestCase):
'''单元测试用例'''
def test_01(self):
'''测试支付成功场景'''
# mock一个支付成功的数据
temple.zhifu = mock.Mock(return_value={"result": "success", "reason":"null"})
# 根据支付结果测试页面跳转
statues = temple.zhifu_statues()
print(statues)
self.assertEqual("支付成功", statues)
def test_02(self):
'''测试支付失败场景'''
# mock一个支付成功的数据
temple.zhifu = mock.Mock(return_value={"result": "fail", "reason": "余额不足"})
# 根据支付结果测试页面跳转
statues = temple.zhifu_statues()
self.assertEqual(statues, "支付失败")

if name == 'main':unittest.main()

相关文章

网友评论

      本文标题:接口自动化测试,二

      本文链接:https://www.haomeiwen.com/subject/ntvuldtx.html