自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 资源 (5)
  • 收藏
  • 关注

原创 【netstub】(二)使用nginx作为流量桩实现服务端数据回放和mock

功能1.1 log的预处理与持久化 ① 请求数据处理后记录日志,(如加密字段解密明文后记录日志) ② 日志汇总集中管理,grapana展示,方便查看和数据共享,输出统计信息,(如请求的覆盖率)。1.2 基于反向代理,前端无感知的mock ①无需配置代理,https请求无需安装证书 ② 同一接口基于规则可mock多条数据,未命中规则的请求不mock1.3 沙盒级别的流量录制与回放1.4 多虚拟环境实现服务复用核心 ...

2021-12-08 20:17:27 2379

原创 【netstub】(一)基于nginx反向代理实现客户端mock

1. 背景目前app前端测试,需要抓包查看接口数据,采用charles进行代理,进行数据抓包。 需要mock数据的话,使用charles的 Map Local功能。问题①mock数据共享比较麻烦,同一接口只能mock 1个返回。② 数据中有加密字段,需要手动粘贴出来进行处理,才能查看数据③ https 安装证书步骤繁琐,部分机型需要特殊处理2.目标期望开发一个mock工具,可以支持https抓包,同API可配置返回不同的数据,抓包数据支持预处理,如可以解密数据字段。3..

2021-12-08 18:50:00 2729

原创 【工具】Testtp 为接口测试人员而生的http client

介绍testtp 是一个requests的拓展,默认增加了参数渲染,上下文结果记录,response结果校验功能。可以更简单的进行http api测试的编写和维护。为什么需要testtp1. 一个典型的接口测试场景#mermaid-svg-nmCBUtawkc9vsWpl .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#merm

2021-01-30 14:44:45 289 1

原创 【工具】git-flo 面向持续交付的Git分支管理实战

gfa git-flow branch managementInstallationpip install gitfloUsage1. 统一规范的commit message 格式gf commitStandardize the format of commit.使用-b/-f 选择是否添加body/footer信息<type>(emoji): <header><BLANK LINE> //空行<body><BLANK LI

2021-01-30 11:30:56 353

原创 【netstub】(三)使用流量桩实现多虚拟环境复用服务

info项目地址:https://github.com/Be5yond/netstub相关文章:【netstub】(一)基于nginx反向代理实现客户端mock【netstub】(二)使用流量桩实现服务端数据回放和mock【netstub】(三)使用流量桩实现多虚拟环境复用服务【netstub】用户手册【netstub】管理员手册1.应用场景经常遇到多个需求并行开发的场景,每个需求的改动可能涉及到服务端的一个或多个服务。这时测试团队进行测试的时候,为了避免干扰...

2022-05-19 12:08:00 560

原创 使用urlencode,在requests中get请求发送字典数据

1.背景某个项目中的一个查询接口,为了前端数据处理方便,get请求也传递了多层嵌套的参数。如下格式{ "page_num": 1, "page_size": 10, "filter": { "type": 2, "status": 1, "sort": { "product": 1, "time": -1 } }}2.问题使用requests内置

2022-04-24 10:40:07 2290

原创 【nginx】静态文件处理:root和alias的区别以及try_files用法

对于静态文件,nginx支持配置文件路径。关键字为root和alias简介配置系统/data/www目录下有如下文件 ─data └─www ├─file │ ├─a.txt │ ├─b.txt └─backup ├─c.txt └─d.txtnginx 配置中,location中配置root关键字。server { ... location /file {

2022-02-15 16:53:49 2604

原创 【nginx】配置proxy_pass之后,响应变慢的问题

背景netstub项目中,使用openresty作为网关,proxy_pass处理。配置如下, access.lua中进行一些预处理,然后代理到目标服务 ... location / { access_by_lua_file /etc/nginx/conf.d/access.lua; resolver 8.8.8.8; proxy_pass http://$http_host; proxy_buffering

2022-01-12 17:20:17 7935 1

原创 【linux】日志分割神器logrotate, 配置介绍

1. 安装CentOS中直接使用yum安装> yum -y install logrotate2.运行机制logrotate的运行依赖 crontab, 安装logrotate后, 自动在 /etc/cron.daily 目录下添加 logrotate 文件内容如下:> cat logrotate#!/bin/sh/usr/sbin/logrotate /etc/logrotate.confEXITVALUE=$?if [ $EXITVALUE != 0 ]

2021-12-29 11:37:22 1781

原创 【思考】如何写好测试报告

1.Why --- 为什么需要测试报告任何报告都是从执行者到客户的重要且简洁的信息传输形式。那么作为测试人员, 让相关的产研合作方知悉关于软件测试过程是非常必要的.测试报告的作用有如下3个方面: 测试报告是评估产品质量是否满足发布标准的文件. 测试报告能够评估项目的当前状态和产品质量. 测试报告可以是说明项目需要采取纠正措施的依据. 2.who --- 测试报告给谁创建报告时, 首先要明确它的用途和接收对象, 根据目标受众关注的需求, 来确定报告应该包含哪些信息.测

2021-12-28 17:57:41 805

原创 【redis】RedisJSON - Redis 的 JSON 数据类型简介

简介RedisJSON 是一个Redis模块,允许从 Redis 键(文档)存储、更新和获取 JSON 值。主要特点:完全支持 JSON 标准 用于在文档中选择元素的类似 JSONPath的语法 文档以树状结构存储为二进制数据,允许快速访问子元素 所有 JSON 值类型的类型化原子操作命令格式JSON.{cmd} key JsonPath value127.0.0.1:6380> JSON.SET test . '{"key": "value"}'O...

2021-12-24 15:58:26 2868

原创 【docker】CentOS8 Docker镜像中配置crontab定时任务清理log

背景netstub项目中, nginx服务 是跑在docker容器中运行, 长时间运行会生成大量的access.log, 需要配置定时清理日志. 将crontab 直接打到镜像中, 不用每次启动容器都去配置配置方法dockerfile中添加如下行,# 安装 crontabsRUN yum -y install crontabs# 添加定时任务 每日清空access.log文件RUN echo "* * */1 * * cat /dev/null > /var/log/ngin

2021-12-23 17:51:22 2747

原创 【openresty】大请求中 ngx.req.get_body_data() 返回nil的解决方法

背景:netstub项目中,后端的lua脚本中使用ngx.req.get_body_data获取请求body中的数据,使用过程中发现,当请求的body数据较大时,nginx会报错,发现ngx.req.get_body_data() 返回的数据是nil。原因:当请求体大于client_body_buffer_size的时候,nginx会将数据保存到一个临时文件里。解决方法:① 配置client_body_buffer_size参数,将其改大,如100k② 当get_body_d..

2021-12-23 11:23:20 2856

原创 【nginx】记录response body和header到access.log

1 背景netstub项目中,需要记录经过网关的请求信息到日志,供loki采集,以便后续的统计分析工作。需要记录请求的request_body, request_header, response_body, response_header数据到access.log。本文记录一下配置过程。2 配置2.1 记录请求url配置nginx配置文件default.conf ,使用nginx内置变量 $host 和$request即可获得url数据log_format main esca.

2021-12-17 16:53:24 8844

原创 【netstub】管理员手册

1.安装部署代码地址:https://github.com/Be5yond/netstub1.1 依赖dockerdocker-compose1.2 安装方法> git clone https://github.com/Be5yond/netstub.git> cd netstub> docker-compose up2.配置2.1 配置DNS服务 mock域名修改coredns目录下的host文件格式如下:192.168.8.171ww.

2021-12-09 11:34:54 791

原创 【netstub】用户手册

1 mock数据配置1.1 mock数据查找原理接口配置,标记出参与区分请求的字段 mock数据配置,配置字段的值分别对应的mock返回 netstub收到请求后,根据接口配置提取当前请求中的数据,md5计算后,查找与之对应的mock数据 ① 找到数据: 返回mock数据 ② 没有找到数据: 返回原始服务数据1.2mock配置页面的使用如需要对/get 接口进行数据mock, 标记多个字段来区分请求① 接口配置页面,标记出参与区...

2021-12-08 16:29:33 762

原创 【docker-compose】启动时报错pyrsistent SyntaxError: invalid syntax

报错信息:# docker-compose -h/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the nex

2021-12-02 17:12:08 1272

原创 【docker-compose】python2 安装过程中报error: command ‘gcc‘ failed with exit status 1

正确安装Python开发环境导致,解决方式如下:yum install python-devel

2021-12-02 17:08:38 1424

原创 【nginx】proxy_pass的使用总结

1. 反向代理的语法nginx 配置反向代理的上游服务,可以使用三种语法proxy_pass配置示例:location / { proxy_pass http://localhost:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr;}fastcgi_pass配置示例:location / { fastcgi_pass...

2021-12-01 15:04:53 2957

原创 【nginx】location 匹配规则总结

1. 语法规则语法规则,location关键字后面是可选的修饰符[ = | ~ | ~* | ^~ ],后面是要匹配的字符串 uri,花括号中是要执行的操作。2. 修饰符说明匹配优先级为 精确匹配=, 其次前缀匹配^~,然后是正则匹配, 再然后匹配不带任何修饰的前缀匹配。最后是交给/通用匹配。一旦匹配成功,则不再进行后续的匹配2.1 示例配置文件如下 location = /files/index.html { echo 1 ind...

2021-11-24 11:23:58 2729

原创 【docker】docker-compose 自定义容器ip地址

1. 背景使用 docker-compose 部署openresty服务,lua脚本中连接同一网络的redis服务时,报错docker-compose.yaml配置如下:version: "3.9"networks: loki:services: loki: ...省略部分配置... resty: image: beyond147896/resty:latest ports: - "80:80" - "443:443"

2021-11-19 17:25:04 10249 1

原创 【coredns】使用coredns搭建私有dns服务器

1. 背景前端测试的需求,觉得目前使用charles代理进行抓包不能满足使用问题:① https协议需要安装证书比较麻烦② 请求和返回数据中有加密数据,需要手动复制出来处理③ 配置mock 不够灵活解决方案:使用Openresty 做反向代理,在原服务外面套一个网关,进行日志记录,和进行数据mock逻辑的处理。这样对于手机端无感知的。将原服务端的ip改为我的Openresty网关,两种方式,一是修改手机的hosts文件,二是自建dns服务器,为了方便端上使用,采用自建dns

2021-11-18 10:48:09 2993

原创 【openresty】安装jmespath

背景使用openresty开发一个项目,为了方便的根据规则解析抽取请求body中的一些数据,需要使用jmespath。项目地址:GitHub - jmespath/jmespath.lua: A pure Lua implementation of JMESPath环境:使用的openresty的官方镜像, openresty/openresty:centos使用luarocks install jmespath,报错缺少gccsh-4.4# luarocks install.

2021-11-15 17:28:21 367

原创 【openresty】引用第三方resty库 --- resty.http

OpenResty 引用第三方 resty 库,只需要将该库的 lua 文件拷贝到 resty 目录下即可。> cd /usr/local/openresty/lualib/resty/> curl -o http_connect.lua https://raw.githubusercontent.com/ledgetech/lua-resty-http/master/lib/resty/http_connect.lua> curl -o http_headers.lua h

2021-10-18 17:01:09 2183

原创 【Redis】利用redis轻松处理经纬度坐标点数据

Redis 3.2 之后,支持地理坐标数据的管理。将给定的坐标元素(纬度、经度、名字)添加到指定的键里面。 这些数据就会以有序集合的形式被储, 可以通过GEORADIUS 计算两个坐标点的距离,或者使用GEORADIUS 和 GEORADIUSBYMEMBER查询某个坐标半径内的数据。下面对其中常用的命令进行一个简单的介绍。1. GEOADD将坐标信息添加到指定的键里面。GEOADD key longitude latitude member [longitude latitude membe.

2021-10-18 15:08:15 3538

翻译 【Redis】键空间通知

1. 功能概览键空间通知使得客户端可以通过订阅频道或模式, 来接收那些以某种方式改动了 Redis 数据集的事件。以下是一些键空间通知发送的事件的例子: 所有修改键的命令。 所有接收到LPUSH key value [value …] 命令的键。 0号数据库中所有已过期的键。 事件通过 Redis 的订阅与发布功能(pub/sub)来进行分发, 因此所有支持订阅与发布功能的客户端都可以在无须做任何修改的情况下, 直接使用键空间通知功能。因为 Redis 目前的..

2021-10-15 17:34:17 356

原创 【Redis】查看redis服务的版本

1. 客户端查看使用redis-cli 连接到redis, 使用info 命令查看version 信息2. 服务端查看使用redis-server --version 或者 -v 可以查看版本信息# redis-server --versionRedis server v=6.2.5 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=2a56d1e8c2635a70# redis-server -vRedis server v.

2021-10-15 16:34:12 3662

原创 slidev 部署到github pages

1. 构建slidev单页应用slidev build生成的应用程序会保存在dist/目录下2. 将dist目录下的内容上传到github仓库然后按照下图设置Pages进入链接网页,发现会找不到js和css文件因为 index.html 中对assets路径缺少github仓库名称,修改index.html重新打开链接,即可在任何环境展示你的presentation了...

2021-10-15 10:33:46 1060

原创 【算法题】获取单向链表中倒数第 N 个节点

思路:单向链表中,获取正数第 N 个节点的方法,只需要从 head 向后前进 N 步即可。代码:In [1]: class Node: ...: def __init__(self, value, next=None): ...: self.value = value ...: self.next = nextIn [2]: def get(n, head): ...: node = head ...: .

2021-09-22 10:59:02 411

原创 【Redis】redis为什么那么快

1. 内存型数据库Redis是内存型数据库,大多数操作都是基于内存的。省去了访问硬盘的步骤2. 数据结构2.1 stringstring 类型采用SDS数据结构来存储,通过空间预分配和惰性空间释放,减少内存申请次数,详细文章介绍2.2 zsetzset 采用的跳跃表可以通过不同的层来达到加速访问节点的效果. 详细文章介绍2.3 dictdcit 类型采用渐进式 rehash 技术来对字典数据进行内存的动态扩展和收缩,详细文章介绍3. 单线程Redis的主体模式还是单.

2021-09-18 11:03:42 119

原创 【算法题】合并两个有序列表

① 合并到新队列代码:In [1]: def merge(lsta, lstb): ...: merged = [] ...: while lsta and lstb: ...: if lsta[0] < lstb[0]: ...: merged.append(lsta.pop(0)) ...: else: ...: merged.app..

2021-09-17 20:47:40 320

原创 【算法题】使用两个栈实现一个队列

思路 ①一个最憨厚的思路就是,两个栈一个作为数据栈,一个作为临时栈,使用数据栈来存储队列数据。入队列和入栈行为完全相同。出队列时,使用另一个栈临时将栈内数据倒叙,返回栈顶数据后。 将数据存回数据栈。定义一个栈结构class Stack: def __init__(self): self.data = [] def push(self, v): self.data.append(v) def pop(self):...

2021-09-17 17:43:30 651

原创 【Redis】dict的渐进式rehash原理

1. 字典的实现1.1 哈希表节点hash表节点的定义如下typedef struct dictEntry { // 键 void *key; // 值 union { void *val; uint64_t u64; int64_t s64; } v; // 指向下个哈希表节点,形成链表 struct dictEntry *next;} dictEntry;包含3个元素, key,

2021-09-17 15:42:01 233

原创 【Redis】ZSet应用跳跃表(SkipList)提高速度

1. 跳跃表(SkipList)的概念跳跃列表是一种数据结构。它允许快速查询一个有序连续元素的数据链表而其快速查询是通过维护一个多层次的链表,且每一层链表中的元素是前一层链表元素的子集。一开始时,算法在最稀疏的层次进行搜索,直至需要查找的元素在该层两个相邻的元素中间。这时,算法将跳转到下一个层次,重复刚才的搜索,直到找到需要查找的元素为止。跳过的元素的方法可以是随机性选择或确定性选择,其中前者更为常见。1.1 跳表的特点(1)由很多层结构组成;(2)每一层都是一个有序的链表;(..

2021-09-16 17:33:08 259

原创 【Redis】string简单动态字符串 SDS

SDS (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds。本文将对 sds 的实现、性能和功能等方面进行介绍1. redis中的string先执行几个命令可以看到:当设置是整数,底层编码则采用int。 当字符串长度小于等于44,底层编码采用embstr; 当字符串长度大于44,底层编码采用raw;embstr编码是专门用于保存短字符串的一种优化编码方式, 这种编码..

2021-09-16 16:01:44 206

原创 【技术分享】Redis介绍presentation (附图片预览)

在线ppt地址:https://be5yond.github.io/redis_intro/图片预览

2021-09-09 20:14:12 354

原创 【Redis】 setbit和getbit的作用

对key所储存的字符串值,设置或清除指定偏移量上的位(bit)。位的设置或清除取决于value参数,可以是0也可以是1。可以把此时的字符串,理解成一个二进制字节串,setbit修改对应bit数的值,0或者1下例可以看到10.20.7.58:6379> setbit var 0 1(integer) 010.20.7.58:6379> get var"\x80" 10.20.7.58:6379> setbit var 7 1(i...

2021-09-09 16:01:57 521

转载 【Redis】解决集群模式下 (error) CROSSSLOT Keys in request don‘t hash to the same slot

在启用集群模式的集群上创建由多密钥操作使用的密钥时,请使用哈希标签将密钥强制放入同一哈希槽中。当密钥包含“{...}”这种样式时,只有大括号“{”和“}”之间的子字符串得到哈希以获得哈希槽。例如,密钥{user1}:myset和{user1}:myset2, 因为只有括号内的user1被用作计算哈希,所以会哈希到到相同的哈希槽。172.31.62.135:6379> CLUSTER KEYSLOT {user1}:myset(integer) 8106172.31.62.135:...

2021-09-09 14:40:40 3051

原创 【技术分享】Unicode 与 Utf-8 Utf-16等编码

1.1 背景计算机起源于美国,英语字符与二进制位之间的关系制定了一套字符编码规则,这套编码规则被称为ASCII编码。英文字母26*2 + 各种符号,2^7就够了表示了。所以ASCII码只需要一个字节。ASCII码标准ASCII码00000000-011111110-31 48-57 65-90 97-122 其他 控制或通信专用字符 数字 [0-9] 大写字母 [A-Z] 小写字母 [a-z] 特殊符号...

2021-09-09 10:14:34 996 1

原创 Python 中调用父类中的方法,super() 函数介绍

1. 概述super() 返回父类的临时对象,然后可以调用父类的方法。常用于扩展父类的方法,通过使用super() 语句直接调用父类的方法,无需再子类中重新实现, 使用最少的代码来扩展父类的方法。一个例子:创建一个矩形类,包含长宽2个属性, 周长和面积2个函数。class Rectangle: def __init__(self, length, width): self.length = length self.width = width

2021-09-07 16:04:17 5217

redis_slides.md

redis 介绍 slidev 版本

2021-09-09

redis介绍.pdf

redis 详解的presentation pdf版

2021-09-09

编码.slides.html

Unicode 与 Utf-8 Utf-16等编码, html格式

2021-09-09

Sanic+Amis快速搭建web服务 presentation

html格式的Sanic介绍,可用作技术分享

2021-06-16

正则表达式. presentation

html格式的presentation文件,可直接用技术分享

2021-06-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除