当前位置: 首页> 房产> 政策 > 获客软件哪个好_网站定制要花多少钱_东莞疫情最新消息今天中高风险区_论文收录网站有哪些

获客软件哪个好_网站定制要花多少钱_东莞疫情最新消息今天中高风险区_论文收录网站有哪些

时间:2025/7/13 1:42:33来源:https://blog.csdn.net/qq_41775119/article/details/144699531 浏览次数:0次
获客软件哪个好_网站定制要花多少钱_东莞疫情最新消息今天中高风险区_论文收录网站有哪些

长期更新好文,建议关注收藏!

目录

  • 接口规范
  • 接口测试
    • 用例设计
    • postman
    • Requests
    • 封装

复习HTTP超文本传输协议
复习cookie+session

  • 实现方式
    1.工具 如postman ,JMeter(后者功能更全)
    2.代码 python+requests / java+httpclient【高级】

接口规范

  • 传统接口
    在这里插入图片描述
  • RESTful
    representational state transfer
    在这里插入图片描述
    特点:面向资源,URL唯一
  1. 通过URL定位资源
/users #所有用户
/users/001 #id==001的用户
  1. 通过HTTP方法对资源CURD(增删改查 create retrieve update delete)
  2. 利用HTTP状态码返回状态信息

接口测试

  • **流程:**需求分析->接口文档解析->设计测试用例->脚本开发->执行和缺陷跟踪->生成测试报告->接口自动化持续集成(执行之类的这个事也管理起来,按规定时间自动做)
  • 接口自动化测试框架
    api/:存储接口对象层
    scripts/:存储测试脚本层(测试类、测试方法)
    data/: .json数据文件
    report/:存储生成的html测试报告
    common/:存储通用的工具方法
    config.py:存储项目的配置信息(全局变量)
    run_suite.py:组装测试用例、生成测试报告的代码

用例设计

编号用例名称模块优先级前置条件接口名称请求方法URL请求头请求数据预期结果实际结果
  • 功能测试
    单接口+业务功能

    • 单接口
      在这里插入图片描述
      1.正向测试
      必填参数组合P0、必填+非必填组合P3、全部参数组合P1
      2.反向测试
      功能异常P1(覆盖反向需求,如登陆失败)、数据异常P2(空、类型不符、长度不符)、参数异常P3(多参、少参、无参、错参)
      有些可能会出现抓包后修改成多参再发送的情况,所以多参也是不可忽略的
    • 业务场景
      针对业务操作步骤分析,尽可能用最少的用例覆盖最多的接口,一般覆盖正向测试即可。
      在这里插入图片描述
  • 性能测试
    响应时长+错误率+吞吐量+服务器资源使用率
    错误率是指服务器运行出错的概率。
    吞吐量:单位时间内服务器处理请求的数量。
    服务器资源使用率:cpu,内存,网络,磁盘等硬件资源占用率。

  • 安全测试
    敏感数据加密+SQL注入+其他,如必须登陆才能查看数据
    在这里插入图片描述

postman

在这里插入图片描述
在这里插入图片描述
下方图片同理,按照JSON格式解析
在这里插入图片描述
之后有许多高级用法。

  • 断言 javascript编写
    1.响应状态码
    2.包含某字符串
    3.JSON数据
    选择Tests
    在这里插入图片描述
    在这里插入图片描述
    或者最新版本
    在这里插入图片描述
/*
pm postman实例
test(param1,param2) 测试方法
param1 显示提示
param2 匿名函数调用
*/
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.success).to.eql(True);//这个value指的是键值对里的值//指定key的值为success
});
  • 工作原理
    在这里插入图片描述
  • 关联
    接口之间有依赖就可以使用关联。
    在这里插入图片描述
    当A从容器(有两种,全局或环境)中取到数据后,发送请求。
  1. 全局变量
  2. 环境变量:需要单独创建环境
    在这里插入图片描述在这里插入图片描述点击眼睛查看全局/环境变量
    在这里插入图片描述
    被测接口A引用变量
    在这里插入图片描述
//在tests中操作
var jsonData=pm.response.json()
pm.globals.set("全局变量key",全局变量value) //使用全局变量做容器 
pm.environment.set("环境变量key",环境变量value)//环境变量做容器
{{全局变量名}} || {{环境变量名}}
//demo1
var jsonData=pm.response.json()
var city=jsonData.weatherinfo.city
pm.globals.set("glb_city",city)//key,value
  • 参数化
    测试数据保存在数据文件,引用数据文件实现脚本迭代调用
    • csv
      逗号分隔,不能测试bool类型,postman读取后全部转为字符串类型,不能存储复杂类型(列表字典等),不能实现参数测试(多参少参无参等)
      在这里插入图片描述
    • json
      相同的数据量,json文件重复部分太多。

导入数据
runner->select file
在这里插入图片描述
读取数据

  1. 在请求参数中使用{{data}}
  2. 在Tests中使用data.key
//url:https://niupi.666.cn/phonearea.php?number={{mobile}}
//mobile取自文件中的mobile
//此时不能通过点击按钮send,需要进入runner选择文件->run
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.data.sp).to.eql(data.sp); //后面这个data.sp指文件中的.sp
});
  • 批量执行多个用例,点击collection->run
    这样可以按业务流程顺序从上到下顺序执行一条龙
    在这里插入图片描述

  • 调试
    顶部导航栏view->show postman console
    可以查看到记录log
    在这里插入图片描述

  • 生成测试报告
    postman本身是不能生成的,需要安装插件newman

安装
前提安装了nodejs
npm install -g newman
newman -v
npm install -g newman-reporter-htmlextra

** 注意:测试用例中如果包含环境使用,则需要导出环境文件**
导出用例:右键collection->export
导入用例:点击import按钮
导出环境/全局变量:点击environment->三个点按钮->export
导入环境/全局变量:同样是那个import按钮 注意切换到environment下
newman-reporter-htmlextra官方文档

#注意是htmlextra 不是html 多年之前已经停止维护了
newman run 测试集文件 -e 环境变量文件 -d 测试数据文件 -r htmlextra --reporter-htmlextra-export report.html
#run xx.json 执行测试集文件
#-r 生成测试报告类型
#--reporter-html-export path存放路径
# -d -e是非必需的
  • 添加文件夹
    根据项目结构,collection里可以分成多个folder,右键collection->add folder
    collection>folder>request

Requests

首先要安装pymysql + requests库,requests库的作用是发送http请求,是基于urllib的http库。

查验是否安装成功
pip show requests
在这里插入图片描述

resp=requests.method(url='url',params={k:v},headers={k:v},data={k:v},json={k:v},cookies='cookie')#如令牌
#method:get/post/put/delete
#params就是url?后面的参数 查询参数
#json json格式的请求体 和data表单格式的只能二选一
print(resp.text)
print(resp.json())

封装

封装解决了代码冗余、代码耦合度高、代码维护成本高。
耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。
模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。
如何解决这些问题?
动态变化的数据改成参数,即参数化;固定不变的改成方法;响应结果用返回值传出。

# tpshop_login_api.py
class TpshopLoginApi(object):# 发送验证码请求@classmethoddef get_verify(cls, session):session.get(url="http://home/index.php?m=Home&c=User&a=verify&r=0.21519623710645064")# 发送登录请求@classmethoddef login(cls, session, login_data):resp = session.post(url="http://home/index.php?m=Home&c=User&a=do_login&t=0.7094195931397276",data=login_data)return resp#test_login.py
import unittest
import requests
from tpshop_login_api import TpshopLoginApi
from parameterized import parameterized# 封装 通用 的 断言函数
def common_assert(self, resp, status_code, status, msg):self.assertEqual(status_code, resp.status_code)self.assertEqual(status, resp.json().get("status"))self.assertIn(msg, resp.json().get("msg"))#参数化
json_data = [{"req_body": {"username": "13012345678", "password": "123456", "verify_code": "8888"},"status_code": 200,"status": 1,"msg": "登陆成功"},{"req_body": {"username": "13048392845", "password": "123456", "verify_code": "8888"},"status_code": 200,"status": -1,"msg": "账号不存在"},{"req_body": {"username": "13012345678", "password": "123456890", "verify_code": "8888"},"status_code": 200,"status": -2,"msg": "密码错误"},{"req_body": {"username": None, "password": "123456", "verify_code": "8888"},"status_code": 200,"status": -2,"msg": "密码错误"},{"req_body": {"username": "13012345678", "password": None, "verify_code": "8888"},"status_code": 200,"status": -2,"msg": "密码错误"}
]# 定义函数,读取 [{},{},{}] --> [(),(),()]
def read_json_data():list_data = []for item in json_data:tmp = tuple(item.values())list_data.append(tmp)# 循环结束后,将 list_data 为 [(),(),()] 数据, 返回return list_dataclass TestTpshopLogin(unittest.TestCase):# 添加类属性session = None@classmethoddef setUpClass(cls) -> None:cls.session = requests.Session()def setUp(self) -> None:# 调用 自己封装的接口,获取验证码TpshopLoginApi.get_verify(self.session)# 测试 tpshop 登录@parameterized.expand(read_json_data())#传入一个listdef test_tpshop_login(self, req_body, status_code, status, msg):#形参中个数、顺序都要一一对应参数化里的keyresp = TpshopLoginApi.login(self.session, req_body)common_assert(self, resp, status_code, status, msg)#原先的测试用例# def test01_login_ok(self):#     data = {"username": "13012345678", "password": "123456", "verify_code": "8888"}#     resp = TpshopLoginApi.login(self.session, data)#     common_assert(self, resp, 200, 1, "登陆成功")## # 测试 手机号不存在# def test02_tel_not_exists(self):#     data = {"username": "13048392845", "password": "123456", "verify_code": "8888"}#     resp = TpshopLoginApi.login(self.session, data)#     common_assert(self, resp, 200, -1, "账号不存在")## # 测试 密码错误# def test03_pwd_err(self):#     data = {"username": "13012345678", "password": "123456890", "verify_code": "8888"}#     resp = TpshopLoginApi.login(self.session, data)#     common_assert(self, resp, 200, -2, "密码错误")
关键字:获客软件哪个好_网站定制要花多少钱_东莞疫情最新消息今天中高风险区_论文收录网站有哪些

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: