HttpRunnner2.x API层
测试用例先查看新建的工程中demo api的用例结构:
接口自定义描述的主要内容包括:name、variables、request、base_url、validate等
name和request部分是必须的,request中的描述形式requests.request完全相同
发送请求登录请求案例首先登录要有接口文档,下面我们看下接口文档描述
在工程中编写登录接口的描述信息
1234567name: 用户账户登录request: url: http://127.0.0.1:8988/v1/user/login method: GET json: username: xiaohong password: "123123"
以上完成了接口的描述,接下来就可以在终端执行该接口
执行完成后,会生成一个报告,我们可以到工程的reports目录下,查看生成的报告:
打开报告
点击报告中的log-1,查看具体的日志:
校验结果从上面的案例,我们已经知道如何发送一个请求了,那么,API里面描述登录请求后,如何知道结果对不对呢?
validate校验器,校验(断言)返回结 ...
HttpRunnner2.x创建项目
快速创建项目使用hrun命令快速创建用例分层的项目,命令如下:
1hrun --startproject hrun_test_api(项目名称)
执行结果
1234567891011121314151617lvjing@lvjingdeMacBook-Pro httprunner-project % hrun --startproject hrun_test_apiStart to create new project: hrun_test_apiCWD: /Users/lvjing/httprunner-projectcreated folder: hrun_test_apicreated folder: hrun_test_api/apicreated folder: hrun_test_api/testcasescreated folder: hrun_test_api/testsuitescreated folder: hrun_test_api/reportscreated file: hrun_test_api/api/demo_api.ymlcreated file: h ...
HttpRunnner2.x介绍
HttpRunner是什么样的框架?HttpRunner是一款面向HTTP(S)协议的通用开源测试框架,只需要编写维护一份YAML/JSON脚本,即可实现自动化测试、持续集成等多种测试需求。
支持的接口协议:HTTP(S)
不支持的接口协议:websocket dubbo等其他
HttpRunner与其他框架对比有哪些优势?主流接口自动化工具框架:
工具
学习成本
录制
持续集成
测试报告
用例管理
性能测试
扩展难度
最低要求
Java+testng+Maven
高
否
是
是
难
是
中
Java
Requests+Python
低
否
是
是
难
是
中
Python
RobotFeamework
低
否
是
是
易
否
高
工具组件
HttpRunner
低
是
是
是
易
是
低
Python
HttpRunner的优势在于上手容易(不用太多代码量,也不用考虑代码数据的分离)
只需要维护YAML/JSON脚本即可实现接口自动化
当然复杂的场景需要借助debugtalk.py写辅助函数完成
框架原理-基于requests库发请求
主要特性
继承Req ...
HttpRunnner2.x录制快速生成测试用例
录制快速生成测试用例
Fiddler/Charles抓包生成.har文件
har2cases生成yaml格式脚本
har2case生成json格式脚本
har2case相关指令-h查看帮助选项
Charles抓包及导出Har文件我们本地启动项目,通过postman发送请求,charles抓包
PostMan代理配置
打开postman设置
设置代理
发送请求
Charles抓包
抓取请求
选中请求,并选择[Export Session…]
保存文件,选择.har格式
查看本地保存的文件
har2case将har文件转用例har2case转yaml格式脚本-2y参数是设置转成.yml格式的脚本,如果不加这个参数,默认转成json格式
12345678lvjing@lvjingdeMacBook-Pro spring-boot-api % lslogin_har.harlvjing@lvjingdeMacBook-Pro spring-boot-api % har2case -2y login_har.harINFO:root:Start to gene ...
使用消息队列详解
消息队列使用场景解耦场景1:现在有一个系统A,系统A可以产生一个userId
场景2:后来,又有了系统B和系统C都需要这个userId去做相关的操作
写成伪代码可能是这样的:
1234567891011121314public class SystemA { // 系统B和系统C的依赖 SystemB systemB = new SystemB(); SystemC systemC = new SystemC(); // 系统A独有的数据userId private String userId = "user_no_01"; public void doSomething() { // 系统B和系统C都需要拿着系统A的userId去操作其他的事 systemB.SystemBNeed2do(userId); systemC.SystemBNeed2do(userId); }}
OK,一切平安无事度过了几天!
场景3:某一天,系统B的负责人告诉系统A的负责人,现在B系统的SystemBNeed2do(String userId)这个接口不再使用 ...
消息队列
什么是消息队列消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列。
消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。
消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,有消息系统来确保信息的可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在。
MQ的本质不论是RocketMQ、Kafka还是其他消息队列,它们的本质都是:一发一存一消费,再直白点就是一个转发器。
生产者先将消息投递已汇入叫做队列的容器中,然后再从这个容器中取出消息,在最后再转发给消费者,仅此而已。
生产者(Producer):消息生产者,负责产生和发送消息到 Broker
处理(Broker):消息处理中心。负责消息存储、确认、重试等,一般其中会包含多个 queue
消费者(Consumer):消息消费者,负责从 Broker 中获取消息,并进行相应处理
上面这个图便是消息队列最原 ...
Redis介绍
NoSQL的引言NoSQL( Not Only SQL ),意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。
RDBMS – 关系型数据库,SQL语句
为什么是NoSQL随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。
NoSQL四大分类1. 键值(Key-Value)存储数据库
说明
一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。
特点
Key/value模型对于IT系统来说的优势在于简单、易部署。
但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。
相关产品
Tokyo Cabinet/ ...
Java操作Redis
环境准备
搭建Maven项目
引入依赖
12345<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.5.2</version></dependency>
创建jedis对象注意:
redis服务必须关闭防火墙
redis服务必须开启远程连接
12345678910111213141516171819202122232425package com.jedis;import redis.clients.jedis.Jedis;import java.util.Set;/** * 测试redis连接 * * @author jinglv * @date 2021/03/27 */public class TestRedis { public static void main(String[] args) { // 1. ...
Redis数据库相关指令
数据库操作指令Redis中库说明
库:database用来存放数据一个基本单元,一个库可以存放key-value键值对redis中每一个都有一个唯一名称|编号,从0开始
默认库的个数:16个库,库的编号:0-15,默认使用的是0号库,注意:库的个数可以在redis.conf中修改
1234# Set the number of databases. The default database is DB 0, you can select# a different one on a per-connection basis using SELECT <dbid> where# dbid is a number between 0 and 'databases'-1databases 16
Redis库的操作
切换库指令:select 库的编号
12345[root@localhost bin]# ./redis-cli -h localhost -p 6379localhost:6379> select 0OKlocalhost:6379> select 1OK ...
Redis持久化
持久化机制client redis[内存] —–> 内存数据- 数据持久化–>磁盘
Redis官方提供了两种不同的持久化方法来将数据存储到硬盘里面分别是:
快照(Snapshot)
AOF (Append Only File) 只追加日志文件
快照(Snapshot)特点这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件因此这种方式也称之为RDB方式。
快照生成方式
客户端方式: BGSAVE 和 SAVE指令
服务器配置自动触发
客户端方式之BGSAVE(推荐)客户端可以使用BGSAVE命令来创建一个快照,当接收到客户端的BGSAVE命令时,redis会调用fork¹来创建一个子进程,然后子进程负责将快照写入磁盘中,而父进程则继续处理命令请求。
名词解释: fork当一个进程创建子进程的时候,底层的操作系统会创建该进程的一个副本,在类unix系统中创建子进程的操作会进行优化:在刚开始的时候,父子进程共享相同内存,直到父进程或子进程对内存进行了写之后,对被写入的内存的共享才会结束服务
...