Gitlab-CI基本介绍——教电脑自动做一件事情的难度

本文由Markdown语法编辑器编辑完成。

1. 自动化测试与Gitlab-CI

自动化测试是一种高级的测试,它主要是为了将一些重复的测试过程,用自动化的形式来完成。它可以解决这样的一些问题:
(1)在敏捷开发中,在每一个新的迭代周期中,当开发新增一些功能点后,测试人员除了要测试这些新增的功能点,还需要花费大量的时间,来进行回归测试。而这些回归测试,其实很多用例都是重复的,都是测试人员之前已经测试过的;
(2)在开发人员修改某一个bug后,测试除了要确认这个bug是否被修复外,还要测试与这个bug相关的功能,是否会因为修改这个bug,而受到影响;
(3)测试人员,除了进行功能测试外,还需要进行一些性能测试和压力测试。而这些测试,一般测试步骤也是固定的,主要是要准备大量的测试数据进行测试;
(4)在涉及到UI界面的测试中,为了测试某一个功能点,一般是需要点击界面中特定的按钮或按钮组合,然后进入下一页,继续点击按钮,然后确认页面是否如预期显示。

基于以上这些可能的测试场景,为了能够减轻测试人员的工作压力,自动测试是一种很好的解决方案。它的思路就是,将测试人员这些比较固定的操作步骤,转化为一套固定的脚本,然后设置一个触发机制。比如每当该分支的代码有新的提交时,就触发这个脚本自动运行,然后运行之前撰写好的自动化脚本。当所有这些自动化脚本运行完毕后,则相应的测试便已经运行完成,系统给出是否通过的标志。

CI是Continuous Integration(持续集成)的简称,也就是当代码有新的提交时,持续地对代码进行编译,保证新提交的代码能够编译通过。
Gitlab-CI则是Gitlab服务器对于部署在该服务器的代码,提供的一个CI的服务支持。只要按照Gitlab-CI的要求,部署相应的runner,那么就可以实现CI的功能。

2. 教会电脑重复做一件事情

近期公司为了对系统的后端代码,增加自动化测试。而且由于项目部署在了Gitlab上,因此需要通过Gitlab-CI,进行后端的自动化测试。所谓自动化测试,其实就是你要通过代码告诉电脑,每一步要做什么。当进行到哪个步骤的时候,需要验证什么值。一些很简单的,人很容易完成的事情,要想告诉电脑去做,其实是有一定难度的。

以下是我在进行CI自动化测试时,涉及到的一个场景,以及如何指挥电脑去重复的做这一件事。

这个测试的需求是:
(1)程序需要去访问一个ftp的目录,并且监控这个ftp的目录内的文件数量,是否在改变。
(2)程序在监控时,有两个参数:一个是每次监控的时间间隔(interval), 一个是监控的总时间(deadline)。
(3)这个ftp的目录的文件,需要模拟服务器,每隔一个时间间隔,增加一个文件,直到增加固定数量的文件后,则停止增加文件。

根据以上的测试需求,我需要完成的测试脚本如下:
(1)首先在ftp的该目录下,拷贝固定数量的文件,比如150;
(2)写一个脚本,每隔5s,向该ftp服务器的目录,上传一张新的文件,总共上传10张文件,因此共需要50s;
(3)开启测试脚本,开启监控该ftp的目录,设置时间间隔为6s(这里的间隔需要大于ftp上传新文件的间隔),判断该监控程序是否能够正常监测到ftp文件数量的变化;
(4)当测试完毕后,需要再将该次测试时,新发送的那10张文件,从ftp目录中删除,以保证下一次自动化测试运行时,原来的目录下,仍然只有初始的150张文件。

这里主要需要撰写第(2)和第(4)两步的脚本:

脚本1:upload_files_to_ftp_timely.sh

#!/bin/bash
#从文件夹内读出文件,并且定时将读出的文件,上传到ftp的服务器中.

# path中存储的是,需要定时上传到ftp服务器的文件目录.
path=/177495181_need_upload
files=$(ls $path)
for filename in $files
do
   echo $filename >> upload_filenames.txt
   bash ./upload_file_to_ftp.sh $filename $path
   sleep 5
   echo "waiting for 5s to upload file."
done

这里,需要将$filename,写入到一个upload_filenames.txt中,是为了之后在测试完成后,需要再从这个txt文件中,读取出之前已经上传了哪些文件到ftp服务器。然后再将这些上传的文件,在脚本3中依次删除。

脚本2:upload_file_to_ftp.sh

#!/bin/sh

#从本地向FTP上传单个文件, 向FTP传递的文件名以及文件所在的文件夹路径,均由调用该脚本时传入.

echo "filename is: $1"
PUTFILE=$1

ftp -v -n 192.168.110.101 << EOF
user ci ci
binary
cd ./177495181
lcd $2
prompt
put $PUTFILE
EOF
echo "Upload file to ftp successfully!"

脚本3:delete_uploaded_files.sh

#!/bin/bash
#根据文本文件中记录的文件名称,从ftp服务器中删除这些文件.

cat upload_filenames.txt | while read line
do
/usr/bin/ftp -n 192.168.110.101 <<EOF
user ci ci
binary
cd ./177495181
prompt
delete $line   #删除ftp服务器上的源文件
echo "delete uploaded file from ftp......"
EOF
done

以上脚本1和2,可以完成刚才提到的第(2)个需求;脚本3可以完成第(4)个需求。

发布了188 篇原创文章 · 获赞 416 · 访问量 131万+

猜你喜欢

转载自blog.csdn.net/inter_peng/article/details/90112037