![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
测试不是一点点
文章平均质量分 84
无论是单测,接口,性能,还是CI/CD,测试平台开发,我会将我所见所闻的测试技术全部交付与你。
公众号-测试生财
分享各类测试技术和资源,请关注微信公众号:测试生财。
展开
-
Linux下升级python3到python3.8
背景最近要使用django开发测试平台,指定了Python3.8作为Python开发环境,而Linux系统上自带的Python版本为Python3.5,因此需要做下Python版本升级。升级过程1)下载Python3.8安装包wgethttps://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz2)解压缩xz -dPython-3.8.2.tar.xztar xvfPython-3.8.2.tar3)配置./c...原创 2021-03-25 08:03:46 · 1758 阅读 · 0 评论 -
python中使用charset判断字符串编码
背景 Python中的字符串编码算是让人头疼的事情。在web开发中,用户输入的字符串通过前端直接透传过来,如果是一些比较奇怪的字符,可能就涉及到Python的编解码转换了。Python自身提供了str和bytes之间的转换,可以通过encode()和decode()函数进行转换,但是比较麻烦的一点是,我们首先要要知道其编码方式,然后才能知道如何对其进行编解码。经过网上搜索得知python有一个charset库,专治此类编码不解之谜。简介项目地址:https://github.com/chard原创 2021-03-22 07:45:31 · 1071 阅读 · 0 评论 -
python转换json字符串中的布尔值
背景http的post和put请求中,一般都需要传递body,用于表单提交或者表单修改。如果我们使用python的requests库,大概会类似使用如下语法:requests.post(url, data=data, headers=headers)问题如果data是一个json字符串:{"is_ok": True},此时我们如何将其转换为标准的json字符串:'{"is_ok": true}'从True到true的转换可能有多重方式在,这里介绍一个比较取巧的方法:实现过程假设:原创 2021-03-19 07:50:46 · 2837 阅读 · 0 评论 -
Linux下性能压测之系统参数调优
1. 前言在做服务端压测的时候,经常会遇到一些由于Linux系统限制导致压力上不去的情况,这里从Linux系统参数上做一些调优,减少此类因素的干扰。2. 配置2.1 Linux系统配置执行:sudo vi /etc/sysctl.conf,添加以下内容:net.ipv4.tcp_syncookies = 0fs.file-max = 12553500fs.nr_open = 12453500kernel.shmall= 1048576kernel.shmmax = 188743原创 2021-03-18 08:20:06 · 524 阅读 · 0 评论 -
MYSQL设置密码以及外网访问
前言本文主要分享了MYSQL安装后,常见的几个操作。例子1)设置MYSQL登录不需要密码mysqld_safe --user=mysql --skip-grant-tables --skip-networkingservice mysqld restart2)设置mysql的密码#登陆到mysql,执行如下命令UPDATE mysql.user SET Password=PASSWORD('123456') where USER='root';3)让MYSQL对外界可访问原创 2021-03-17 08:21:46 · 164 阅读 · 0 评论 -
pip:No module named setuptools_rust
前言在某台Linux机器上安装ansible的时候,在安装到下图进度时候突然报错:No module named setuptools_rust分析看到报错,我以为是setuptoos_rust的问题,我尝试执行:python -c 'from setuptools_rust import RustExtension',显示没有找到此模块。安装:setuptools_rust执行:pip install setuptools-rust。通过执行:python -c 'from s原创 2021-03-05 08:21:14 · 32149 阅读 · 9 评论 -
docker一键搭建postgresql脚本(全网精华版原创)
前言本篇文章将演示如何利用docker快速搭建postgresql数据库,并提供了一键安装脚本用于快速安装。脚本脚本列表start_docker_postgres.sh:一键安装脚本pg_hba.conf:postgresql的访问限制配置文件postgresql.conf:postgresql的主配置文件脚本内容pg_hba.conf# "local" is for Unix domain socket connections onlylocal all all原创 2021-03-03 08:31:16 · 417 阅读 · 2 评论 -
etcdctl常用指令说明(v3版本)
简介etcd分为etcd2和etcd3版本,两个版本之间的api相互不兼容,现在大多数公司都在使用etcd3版本,本文也以etcd3作为演示对象。etcdctl工具etcd附带的命令行工具,可以很方便的对etcd中的数据进行管理。etcdctl有两个版本:v2和v3,可以分别使用如下方式来设置版本:#设置v2版本export ETCDCTL_API=2#设置v3版本export ETCDCTL_API=3这里我们以只介绍etcdctl v3版本。配置v3版本sudovi.原创 2021-03-01 08:17:33 · 4544 阅读 · 0 评论 -
Clickhouse集群性能测试(全网独家精华版)
背景公司使用clickhouse作为其时序分析数据库,在上线前需要对Clickhouse集群做一个性能基准测试,用于数据评估。这里我搭建了三节点的集群,集群采用三分片单副本的模式(即数据分别存储在三个Clickhouse节点上,每个Clickhouse节点都有一个单独的副本,如下图:具体的搭建方式参考:Clickhouse集群搭建性能测试说明性能关注指标clickhouse-server写性能 clickhouse-server读性能 clickhouse-server的CPU和原创 2021-02-16 09:40:48 · 1562 阅读 · 0 评论 -
Docker快速搭建Clickhouse集群(3分片3副本)
背景前文简单介绍了下Clickhouse的安装和客户端使用,在实际生产环境中,Clickhouse常常是以集群模式部署的,由于很多系统不满足sse4.2指令,这里使用docker来搭建一个Clickhouse的集群。1. 环境说明1.1 机器列表 机器名 IP 配置 操作系统 部署的服务 备注 server01 192.168.21.2原创 2021-02-15 09:28:57 · 3590 阅读 · 7 评论 -
时序数据库:clickhouse和clickhouse-client的安装使用
背景公司的项目中使用到了Clickhouse,在该时序数据库安装完后,需要对业务使用到的相关表进行初始化。开发提供了一份建表的sql文件,这里我需要执行该sql文件进行初始化即可。这里我使用到了Clickhouse的原生命令行客户端:Clickhouse-client,用于快速导入。安装clickhouse1)验证是否支持sse4.2#clickhouse的server已经client仅支持x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Ma.原创 2021-02-12 14:11:01 · 1883 阅读 · 0 评论 -
RocketMQ:设置broker的对外IP
背景最近在公司遇到这么一个问题:我在测试环境中搭建了一套RocketMQ,开发想要使用本机连接进行生产消费的测试,但是发现服务无法正常访问,报如下错误:send heart beat to broker error {"fields": {"underlayError":{"Op":"dial","Net":"tcp","Source":null,"Addr":{"IP":"10.13.10.29","Port":10911,"Zone":""},"Err":{}}}}分析这个错误指的是本机原创 2021-02-11 16:54:22 · 5540 阅读 · 0 评论 -
一站式测试平台:Metersphere本地开发环境搭建
背景最近公司要做一个测试平台,主要功能涉及了产品,开发和测试三方的业务联动。其实在业界已经有了很多类似的开源平台,例如阿里的云效,腾讯的tapd,还有很多其他的云测试平台。由于涉及到公司的信息安全问题,公司内部希望能够自研一款对内的测试平台,解决产研测一体化的问题。通过对市面上各种竞品调研,最终选定了metersphere这款测试平台进行二次开发。由于需要对平台进行二次开发,所以基本都是利用源码的方式来安装运行(如果你需要进行二次开发,直接按照官网的文档快速部署即可)。Metersphere文档原创 2021-02-10 08:41:44 · 5225 阅读 · 4 评论 -
kuiper批量创建规则的例子
引言前面提到了测试kuiper创建规则上限数遇到的问题,这里给大家分享一下如何批量创建多条规则。分析kuiper官网的性能测试结果中没有详细说明8000条规则的具体场景。这里我是这么理解:首先有8000个流,其中800个流对应一个SELECTtemperatureFROM sourceX WHERE> 20这样的规则;另外7200个流对应SELECTtemperatureFROM sourceY WHERE temperature <= 20这样如果我发送的MQ...原创 2021-02-05 09:18:02 · 179 阅读 · 0 评论 -
kuiper规则数上限测试的突发问题
背景kuiper的官网中有提到:kuiper支持8000条规则下的数据路由处理,于是我便尝试搭建该测试环境试试。测试方法如图,我搭建了一个虚机来跑Kuiper,Kuiper会订阅Emqx Broker的Topic,这时候我用一个MQTT客户端(比如MQTTBox或者Jmeter)向Emqx Broker特定topic发送消息。Kuiper中的规则引擎就会对订阅到的每条消息进行过滤处理(即类似执行sql),并输出到Kuiper的日志中。突发问题使用前文提到的环境,在kuipe.原创 2021-02-04 09:25:41 · 196 阅读 · 0 评论 -
kuiper流式计算完整实例演示
背景前面文章分享了如何安装kuiper和kuiper-manager,本篇文章通过一个完整的例子来演示kuiper的一个比较完整的流式计算。下图仍旧使用了kuiper官网文档中的图,我在里面稍微加了一些注释:流式计算创建操作过程kuiper的流式计算创建于操作分为如下几个步骤:使用命令行/rest/控制台创建一个流(对应sources) 基于创建的流编写路由规则(对应sql/rule部分) 使用mqtt工具给mqtt broker发送消息(上文中kuiper使用emqx作为其mq原创 2021-02-03 08:54:17 · 490 阅读 · 0 评论 -
centos下搭建kuiper以及kuiper-manager
什么是kuiperEMQ X Kuiper 是 Golang 实现的轻量级物联网边缘分析、流式处理开源软件,可以运行在各类资源受限的边缘设备上。Kuiper 设计的一个主要目标就是将在云端运行的实时流式计算框架(比如Apache Spark,Apache Storm和Apache Flink等)迁移到边缘端。Kuiper 参考了上述云端流式处理项目的架构与实现,结合边缘流式数据处理的特点,采用了编写基于源 (Source),SQL (业务逻辑处理),目标 (Sink)的规则引擎来实现边缘端的...原创 2021-02-02 08:23:17 · 706 阅读 · 0 评论 -
Centos搭建EMQX和EMQ-Dashboard(踩坑精华版)
背景最近在做物联网平台性能分析,最终选择EMQX作为对比对象。我小试牛刀地搭建了一下EMQX,并顺便安装了一下EMQX的Dashboard插件:emqx-dashboard。简介:EMQX:EMQ X(Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。EMQX-Dashboard:EMQ X的Web控制台,项目地址:https://github.com/emqx/emqx-dashboar.原创 2021-02-01 08:39:58 · 2933 阅读 · 2 评论 -
centos7下安装erlang
背景emqx中使用到了erlang作为其运行前提,为了编译相关插件,这里分享下如何在cento7下安装erlang。安装方式erlang两种主流安装方式:1. 源码安装:http://erlang.org/download/otp_src_23.2.tar.gz2.软件包管理器安装ForHomebrewonOS X:brew install erlang ForMacPortsonOS X:portinstall erlang ForUbuntuandDe...原创 2021-01-29 08:34:55 · 783 阅读 · 0 评论 -
centos7下升级git版本
背景编译EMQX插件依赖了git的版本,需要使用1.8.5以上的版本,但是我系统(centos7)中的版本为1.8.3,不符合版本要求,如下图安装过程1. 卸载旧版本yum -y remove git2. 安装依赖sudo yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc gcc perl-ExtUtils-MakeMaker3. 选择版本git原创 2021-01-28 08:21:53 · 246 阅读 · 0 评论 -
pytest失败重跑插件: pytest-rerunfailures使用与坑(全网独家精华)
背景在编写接口case的时候,我们常遇到一个这样的问题:测试环境不稳定偶发接口超时(和服务无关,纯粹是环境问题),然后执行接口case也因此偶发失败。比如同一个接口case跑五次,其中有两次失败,另外三次都是成功的,这种偶发性的环境问题就需要我们手动重跑(还不一定能够通过)。有没有一个比较好的机制,保证case能够尽最大努力通过测试呢?这里我们介绍pytest的一个失败重跑插件:pytest-rerunfailures介绍pytest-rerunfailures是一个通过重跑机制来消除不原创 2021-01-27 08:02:14 · 5318 阅读 · 0 评论 -
pytest-assume插件(全网最详细解释):多重断言执行
背景使用pytest进行断言判断的时候,为了用例的精准性,经常会多个方面进行断言,比如如下:断言1:断言响应的http的状态断言2:断言响应返回的code值断言3:断言响应返回的json中的data字段是否符合预期。如果使用原生python的assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。我们希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候该本文主角出原创 2021-01-25 09:09:20 · 3865 阅读 · 1 评论 -
pytest-ordering:指定pytest的case运行顺序的插件
背景在写接口或功能自动化case的时候,会遇到一些case有先后执行顺序的场景。比如:注册->登陆,先调用注册接口在数据库里面生成用户名和密码,然后使用登陆接口验证登陆。在pytest里,如果注册和登陆分别是两个testcase,默认执行执行顺序是从前到后的。例子有一个pytest的测试case用例:test_login.py#/usr/bin/env python3import pytestdef test_login(): assert Truedef tes原创 2021-01-21 09:05:43 · 2293 阅读 · 2 评论 -
pytest测试入门篇(ExitCode退出码)
前言在使用pytest框架的时候,经常会涉及对pytest命令进行二次封装,比如写一个shell或者python脚本调用pytest。这样做的好处是可以为用户提供几个运行场景,简化pytest的命令行参数使用。封装脚本需要对实际运行的pytest命令进行退出码判断,然后进行逻辑判断再返回给实际用户查看。那么下面我来分享下pytest的框架退出码。分析如下图,是pytest的退出码的枚举类:ExitCode。执行python3,输入:from pytest import ExitCode原创 2021-01-18 08:42:51 · 1555 阅读 · 0 评论 -
httprunner3.x遇到的问题(hrun make报错)
前言上一期介绍了httprunner3.x,并尝试安装了httprunner3.x,在使用hrun make命令时报错了:missing dependency tool: black,报错如下。解决过程根据提示,执行pip install black提示black已经安装到python3的相关路径下,但为什么说找不到black这个工具呢?是不是black工具位置不对?执行:which black,发现在/usr/local/python3/bin/black这个路径下面。原创 2021-01-15 08:31:34 · 1072 阅读 · 0 评论 -
httprunner3.x(入门介绍篇)
Httprunner是一款简单优雅的http(s)的接口测试框架。在当前测试行业,接口测试已经是必备技能了,而python也是广大测试同行们深爱的语言之一。httprunner这个工具就兼有了接口录制/导出,多种case编写格式(json/yml/pytest),入门门槛低,灵活且生态完整。httprunner更专注于http(s)接口层面的测试;python最长寿的unittest框架,则可以作为单元测试自动,http(s)/tcp层的接口或者功能集成自动化。介于httprunner的名气越来原创 2021-01-13 09:09:27 · 1445 阅读 · 0 评论 -
Ubuntu安装kubectl
引言本文介绍如何在无法访问国外网络的情况下,在Ubuntu上安装kubectl。安装步骤1. 更新源sudo apt update2. 添加apt密匙apt-key addapt-key.gpg3.添加k8s国内的源cat <<EOF >/etc/apt/sources.list.d/kubernetes.listdeb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main.原创 2020-12-25 08:17:27 · 4208 阅读 · 0 评论 -
macOS安装minikube
什么是minikube?minikube是单机版的kubernetes,主要用于方便个人学习和研究K8s。你仅需要一些一些容器环境(例如docker)或者虚拟机环境,然后在此之上使用minikube start就可以启动K8s。环境依赖:2核以上CPU 2GB以上内存 20GB可用的存储空间 外部 容器或者虚拟机环境:Docker,Hyperkit,Hyper-V,KVM,Parallels,Podman,VirtualBox, orVMWare开始安装提示:需要...原创 2020-12-24 09:01:33 · 424 阅读 · 0 评论 -
测试面试LeetCode系列:IP地址无效化
题目给你一个有效的 IPv4 地址address,返回这个 IP 地址的无效化版本。所谓无效化IP 地址,其实就是用"[.]"代替了每个 "."。示例 1:输入:address = "1.1.1.1"输出:"1[.]1[.]1[.]1"示例 2:输入:address = "255.100.50.0"输出:"255[.]100[.]50[.]0"来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble...原创 2020-12-18 08:43:02 · 192 阅读 · 0 评论 -
测试面试LeetCode系列:二进制链表转整数
题目给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。请你返回该链表所表示数字的 十进制值 。示例 1:输入:head = [1,0,1]输出:5解释:二进制数 (101) 转化为十进制数 (5)示例 2:输入:head = [0]输出:0示例 3:输入:head = [1]输出:1示例 4:输入:head = [1,0,0,1,0,0,1,1,1,0,...原创 2020-12-17 09:13:41 · 101 阅读 · 0 评论 -
ansible的模板变量渲染后带u(unicode)
背景最近使用ansible管理项目部署,有个前端的配置项是类似字典类的配置,其值如{‘memu1’:['/test1','/test2']},在ansible渲染后模板配置项变成了{u'memu1’:[u'/test1',u'/test2']}。问题过程假设ansible中某配置文件的模板如下:navs : {{ nav }}通过ansible传递的变量值为如下:navs:{‘memu1’:['/test1','/test2']}如果使用template模块渲染,最终的配置项会.原创 2021-03-23 14:27:18 · 661 阅读 · 0 评论 -
vue中axios异步调用接口的坑
背景最近在写vue项目的时候遇到一个axios调用接口的坑,有个前端模块涉及axios去调用多个接口,然后请求完获取数据之后,再使用windows.location.href重定向到新页面,这时候却发现axios请求的接口都是出于canceled的状态。例如:axios.get('/url1') .then(function (response) { console.log(response); }) .catch(function (error) { consol原创 2020-12-11 08:48:12 · 1431 阅读 · 0 评论 -
[PM2][ERROR] Process XXX not found
背景公司的项目全部由pm2管理,有一天不知道什么原因,利用pm2 list查看APP列表,发现有几个服务处于STOP状态,我尝试使用:pm2 start all结果报错:[PM2][ERROR] Process 1021 not found解决方法直接删除报错的app id即可,如:pm2 delete 1021博主:测试生财座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。csdn:https://...原创 2020-12-10 08:43:51 · 5484 阅读 · 0 评论 -
rocketmq性能调优:broker快速失败判断maxWaitTimeMillsInQueue
背景公司已上线的项目中的broker集群有部分请求响应较慢,所以进行了线上broker服务的扩容。扩容后整体broker集群的负载下来了不少。这样一周后,某天看rocketmq的客户端的日志中零星打印了报错:system busy。问题分析为什么broker集群扩容了,仍旧有报错呢?和开发对了下,我们broker集群搭建在公有云虚拟机上的,所以可能有以下情况:1. 网络拥塞/抖动公有云的网络环境是未知的,可能是实际线路上的网络调整,或者公有云上的网络服务上线问题导致。2. 虚机资源不原创 2020-12-09 08:20:16 · 1145 阅读 · 0 评论 -
python字符串遍历方式
前言很多面试题里都有关于字符串相关的算法,这里简单总结一下python的字符串遍历。遍历方式python的字符串遍历有三种方式:1. 下标法2. for in3. iter内置函数4. enumerate其中下标法和enumerate适合需要判断后续字符的场景,比如循环到下标index出,要求判断index+1的字符这种。最典型的题目就是语法解析器,判断"(())"这种成对的括号的算法。"for in"和iter适合对字符进行直接处理的一类题目,比如大小准换,字符串对比之原创 2020-12-08 08:49:43 · 639 阅读 · 2 评论 -
测试面试LeetCode系列:一维数组的动态和
每日一刷的LeetCode题目又来了,寒冬之下,助你拿一个大厂的测开offer给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。示例 1:输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。示例 2:输入:nums = [1,1,1,1,1]输出:[1,2,3,4,5]解释:动.原创 2020-12-07 08:57:51 · 208 阅读 · 0 评论 -
测试面试LeetCode系列:打印特定文本第十行内容
引言本题为LeetCode上的shell简单系列,建议掌握此题,一二线互联网的面试依旧越来越LeetCode风。已经逐渐从开发吹到了测试开发。。题目给定一个文本文件file.txt,请只打印这个文件中的第十行。示例:假设file.txt 有如下内容:Line 1Line 2Line 3Line 4Line 5Line 6Line 7Line 8Line 9Line 10你的脚本应当显示第十行:Line 10...原创 2020-12-04 09:08:30 · 277 阅读 · 0 评论 -
MacOS安装telegraf:Error: Permission denied @ apply2files - /usr/local/opt/openssl/ssl/man/man3/HMAC.3
背景我在自己Macbook上使用homebrew安装telegraf。执行:brew install telegraf,然后报错了:Error: Permission denied @ apply2files - /usr/local/opt/openssl/ssl/man/man3/HMAC.3问题定位尝试1看上图所示应该是权限问题,是缺乏root权限吗?执行:sudobrew install telegraf如上图所示:homebrew不能以root权限运行。尝.原创 2020-12-02 19:23:40 · 652 阅读 · 0 评论 -
rocketmq线上集群性能优化:异步刷盘与异步复制
背景最近公司的项目中使用rocketmq,部署方式为多master-多slave。项目上线一周后,有一天调用方的开发突然找我,说我们的MQ服务的请求调用有延时。我登陆到broker的机器上查看了broker的store.log,发现pagacache的大部分响应都在0~50ms,有部分请求在100ms~200ms。看来broker集群的负载有些高了。方案我和几个开发对了下应对方案:一是通过扩容broker集群降低broker的处理压力二是优化当前的broker配置来提升性能最终考原创 2020-11-30 08:23:50 · 810 阅读 · 0 评论 -
ansible远程执行shell报错:command not found
背景项目中使用到了pm2,用于管理微服务的启停,我在相关机器上安装好了pm2,然后使用ansible进行批量启动服务。在使用ansible的shell模块执行远程命令时候却报了错:/bin/sh: pm2 :command not found,如下图问题定位1. 在被执行机器上查看pm2命令,看看是不是没有添加到环境变量(PATH)里。登陆到这台机器上,执行:which pm2可以看到pm2已安装到机器上了。再看看是否已添加到环境变量中。如下图,我已经把pm2的路径添加到原创 2020-11-27 08:34:33 · 4192 阅读 · 0 评论