采用Jenkins+Tcpcopy搭建自动测试环境

作为一名软件开发人员,对软件开发过程中的每个环节都不陌生,我们的代码提交后需要经过代码建构、单元测试、软件部署才能放到线上,有时候还要进行稳定性测试和压力测试。代码构建、单元测试、软件部署这些环节都必不可少,每个环节都要我们亲历亲为,会很费时间,有没有一种自动化的方式。另外,软件长时间运行的稳定性如何,承载能力如何,有没有一种自动化方法来测试软件的稳定性和系统承载能力。针对这两个问题,本文介绍一种Jenkins+Tcpcopy的软件自动化测试方法。

1      Jenkins

Jenkins是一个持续集成工具,能够依据资产库(源码,类库等)的变更自动完成编译、测试、部署和反馈,具体见下图:

 

1)       自动构建:可采用多种方式触发自动构建,比如版本库的变更、定时机制。

2)       纯净的构建环境:每一次都可把之前的环境删除干净,让每一次构建都是一个新的构建。

3)       完善的集成功能:集成代码测试,代码审查功能,支持自动化单元测试。

4)       反馈机制:在出现问题时,能及时的把问题反馈给相关人(代码提交者、测试人员、管理人员)

5)       回滚:在出现问题后,可进行版本回滚。

2      Tcpcopy

Jenkins能解决软件开发过程中代码构建、单元测试、软件发布的自动化问题,但是软件部署后是否能够长期稳定的运行,系统承载能力如何,这些问题是Jenkins解决不了的。下文我们通过TcpCopy来实现稳定性测试和压力测试。

2.1   工作机制

Tcpcopy是一种请求复制工具。可以将线上流量拷贝到测试机器,实时的模拟线上环境。在不影响线上用户的情况下,使用线上流量进行测试,以尽早发现bug。也可以通过放大流量,进行压力测试,评估系统承载能力。

Tcpcopy可以从线上服务器的抓取在线请求的数据包,通过修改目标请求地址和端口,将其发送给测试服务器进行测试。测试服务器上需运行拦截程序(intercept进程)。intercept进程默认会丢弃应用的响应内容,以释放tcp连接。具体工作流程,见下图


 Tcpcopy拷贝一次流量访问的步骤如下:

1)       一个访问到达线上前端机;

2)       socket数据包在ip层被拷贝了一份传给tcpcopy进程;

3)       tcpcopy修改包的目的地址及源地址,发给目标测试机;

4)       拷贝的包到达目标测试机;

5)       目标测试机的软件应用处理访问(nginx),并返回结果;

6)       返回结果在ip层被截获、丢弃,由intercpet进程拷贝返回结果的ipheader并返回;

7)       ipheader被发送给线上前端机的tcpcopy进程。

2.2         搭建及使用方法

下面举例说明Tcpcopy的搭建及使用方法,以下图中的测试环境为例进行说明。

 

服务器A:线上服务器,运行线上服务,服务端口81;

服务器B:测试服务器,部署测试服务,服务端口81;

服务器C:辅助服务器,拦截来自测试服务器的响应包;

 

服务器B:

添加路由:route add -net 10.10.30.0 netmask255.255.255.0 gw 10.10.20.2

 

服务器C:

安装tcpcopy0.96(见后文),并按照以下方式启动intercept

# modprobe ip_queue

# iptables -I OUTPUT -p tcp --sport 81 -jQUEUE

# intercept -i eth0 -F 'tcp and src port81' -d

如果内核版本大于3.5,按如下方式进行启动

# sudo iptables -I OUTPUT -p tcp --sport 81-j NFQUEUE
# sudo intercept -i eth0 -F 'tcp and src host 10.10.30.1 and src port 81' -d

 

服务器A:

安装tcpcopy0.96,并执行以下指令

tcpcopy -x 81-10.10.20.1:81 -s 10.10.20.2 -c 10.10.30.1–d

      

tcpcopy安装:

下载地址:https://github.com/wangbin579/tcpcopy/releases

# ./configure --enable-advanced--enable-pcap

# make
# make install

如果内核版本大于3.5,编译时添加参数--enable-nfqueue

如果configure过程中出现“error: pcap.h not found”,则需安装libpcap,yum install libpcap-devel
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页