# CGI接口自动化测试 **Repository Path**: xiaojin2630/xls_cgi ## Basic Information - **Project Name**: CGI接口自动化测试 - **Description**: 使用excel管理所有的接口用例,驱动脚本读取,管理和执行用例,将执行结果直接写入excel,方便查看和汇总。 - **Primary Language**: Ruby - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-12-16 - **Last Updated**: 2025-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CGI接口自动化测试 ### 介绍 使用excel管理所有的接口用例,驱动脚本读取,管理和执行用例,将执行结果直接写入excel,方便查看和汇总。 ### 用例的组织和管理 几年前,在测试WAF产品时,我曾直接使用代码编写测试用例,未使用Excel或CSV或YAML等工具组织用例。发现灵活很好,但不方便交接给其他同事维护用例。 网络上也有使用Jmeter和PostMan管理用例的。PostMan我没深入用过,但其商业性质等原因,我已放弃使用。Jmeter我试过用一段时间,功能也不错。Jmeter可以从CSV文件中读取用例,那CSV中使用逗号分割,感觉功能还是不够。所以个人认为Excel才是管理接口用例最佳选择。 ### xls_cgi工具 xls_cgi工具是我最近接手一个接口测试时,使用Ruby编写的一个接口自动化测试工具。 因为接手的项目的接口多达700个,人工执行测试验证及回归已不现实。 xls_cgi使用excel管理用例,在Linux命令行调用执行,每个包含用例的sheet均会被加载(当然也可以控制加载某个sheet),然后一行行读取数据进行解析。转化成另一种数据结构,再执行用例,将执行结果写到一个新的excel文件中 ### xls_cgi工具不足之处 xls_cgi无条件判断,无多步骤功能。它的出现只为了方便、快速地对接口中字段有效性进行测试和单一接口的验证。 当然复杂逻辑的接口测试用例,可以使用代码直接编写实现。 ### 主要特性 1. 支持表格添加额外的自定义列(不会影响脚本的解析) 2. 支持多种断言表达式 3. 支持用例执行范围及调试功能 4. 支持测试结果直接写入表格 5. 支持HTTP请求Body内容嵌入变量定义 6. 支持HTTP请求Body内容嵌入变量数组 7. 支持多种断言表达式嵌入变量定义 8. 支持对测试结果备注 ### 特性1 支持表格添加额外的自定义列 如下图: 除了蓝色背景的列是核心列不可更名外,可以随意添加额外的列,方便自己使用。如下图的“bug备注”,当然新加列的位置也是可以随意放的。 查看原始图片:[1-表格添加额外的自定义列.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/1-表格添加额外的自定义列.png) ![图表](特性/1-表格添加额外的自定义列.png) ### 特性2 支持多种断言表达式 查看原始图片:[2-支持多种断言表达式.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/2-支持多种断言表达式.png) ![图表](特性/2-支持多种断言表达式.png) ### 特性3 支持用例执行范围及调试功能 **场景1** : 用excel管理接口用例,用例数量最少也有几十个,多达几百个。每次只能必须跑所有的用例,明显不够灵活。 可以使用 -i <数字参数> 指定执行哪几个用例。如右下图红框中的数字。 - 示例1-不指定-i : **执行所有的用例** - 示例2-只执行1到3 : **-i 1-3** - 示例3-只执行1到3,5到6 : **-i 1-3,5-6** - 示例4-只执行1,3,5 : **-i 1,3,5** 查看原始图片:[3-p1-支持用例执行范围及调试功能.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/3-p1-支持用例执行范围及调试功能.png) ![图表](特性/3-p1-支持用例执行范围及调试功能.png) **场景2** : 有时需要打印HTTP请求内容和响应内容及断言内容。使用-d 。 查看原始图片:[3-p2-支持用例执行范围及调试功能.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/3-p2-支持用例执行范围及调试功能.png) ![图表](特性/3-p2-支持用例执行范围及调试功能.png) 查看原始图片:[3-p3-支持用例执行范围及调试功能.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/3-p3-支持用例执行范围及调试功能.png) ![图表](特性/3-p3-支持用例执行范围及调试功能.png) ### 特性4 测试结果直接写入表格 管理用例的excel表格同时也是报告的模板,待用例执行完后,会将结果准确地填入相应的行单元格,演示如下: 步骤1:写入请求data,这里以json为例,如下图: 查看原始图片:[4-p1-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p1-测试结果直接写入表格.png) ![图表](特性/4-p1-测试结果直接写入表格.png) 步骤2:执行此用例 ``` $ go -a run -s ‘演示用例’ -i 1 ``` Linux命令行可以看到此条用例无法执行,原因是没有填写断言表达式 查看原始图片:[4-p2-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p2-测试结果直接写入表格.png) ![图表](特性/4-p2-测试结果直接写入表格.png) 查看原始图片:[4-p3-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p3-测试结果直接写入表格.png) ![图表](特性/4-p3-测试结果直接写入表格.png) 增加断言: “CODE = 200” 查看原始图片:[4-p4-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p4-测试结果直接写入表格.png) ![图表](特性/4-p4-测试结果直接写入表格.png) Linux命令行可以看到测试通过了。 (判断依据是HTTP响应CODE = 200) 查看原始图片:[4-p5-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p5-测试结果直接写入表格.png) ![图表](特性/4-p5-测试结果直接写入表格.png) 下图中HTTP的响应也填充了进去,返回的是JSON数据。 查看原始图片:[4-p6-测试结果直接写入表格.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/4-p6-测试结果直接写入表格.png) ![图表](特性/4-p6-测试结果直接写入表格.png) ### 特性5 HTTP请求Body内容嵌入变量定义 **场景** : 复杂的接口,其请求数据一般是JSON或XML居多,里面包含的字段也很多,整个字符串也很长。 如果要对各个字段的有效性进行测试,就需要人为在这些大量的字符串里一一修改。每个case均要修改,给用例的编写和维护带来一些不便。 有了变量的定义,这种现状要改善很多。 通过在表格“变量”这一列定义一个或多个变量,请求数据那里仅需填写变量名即可。增加同类case时,只需复制请求数据的同时,把变量的值做相应的更改就可以了。 如下面4个case,data列的内容中的value字段的值全部用”<%=@var%>”表示。 只需要在左列中定义变量@var = <值>即可。 像这种多字段的用例编写时,只需复制data列内容,更改左侧变量值。 方便、快捷,同时也很直观。 查看原始图片:[5-p1-HTTP请求Body内容嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/5-p1-HTTP请求Body内容嵌入变量定义.png) ![图表](特性/5-p1-HTTP请求Body内容嵌入变量定义.png) 让我们执行下这4个用例。 查看原始图片:[5-p2-HTTP请求Body内容嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/5-p2-HTTP请求Body内容嵌入变量定义.png) ![图表](特性/5-p2-HTTP请求Body内容嵌入变量定义.png) 查看原始图片:[5-p3-HTTP请求Body内容嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/5-p3-HTTP请求Body内容嵌入变量定义.png) ![图表](特性/5-p3-HTTP请求Body内容嵌入变量定义.png) ### 特性6 HTTP请求Body内容嵌入变量数组 上面提到Body内容嵌入变量定 义,通过上面的示例我们可以看到,对一个字段的有效性测试,随便就写了4个case;当然实际情况可能多达10+个或几十个。 像我们最近的一个接口测试项目,产品支持的CGI接口多达700多个。里面包含的字段是非常多。如果按这样一行一个字段的有效性做为一个case,到时也会将excel表格的行数增加到很大的数字。 而有变量数组功能,可以这4个case合并成一个case:将4个变量值,全部归到一个数组里即可。 脚本执行此类case时,会自动展开4个子case去执行。 ``` @list = [“aa”, “bb”, “cc”, “dd”] ``` 定义了一个@list数组(列表),将4个值做为元素放在里面。 查看原始图片:[6-p1-HTTP请求Body内容嵌入变量数组.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/6-p1-HTTP请求Body内容嵌入变量数组.png) ![图表](特性/6-p1-HTTP请求Body内容嵌入变量数组.png) 让我们执行下吧: Linux命令有几个要注意的地方,这里只需执行代码为1的用例了(-i 1)。同时下面tc_sub = 4。这里因为子case = 4的缘故。 查看原始图片:[6-p2-HTTP请求Body内容嵌入变量数组.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/6-p2-HTTP请求Body内容嵌入变量数组.png) ![图表](特性/6-p2-HTTP请求Body内容嵌入变量数组.png) 测试结果中可以看到有4个变量: var1-var4 查看原始图片:[6-p3-HTTP请求Body内容嵌入变量数组.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/6-p3-HTTP请求Body内容嵌入变量数组.png) ![图表](特性/6-p3-HTTP请求Body内容嵌入变量数组.png) ### 特性7 多种断言表达式嵌入变量定义 **场景** : 有的CGI接口,对其某个字段的值进行设置时,若设置成功,其响应中会返回新设置的值 。以我自己开发的一个cgi demo为例吧。 POST请求的目的是设置age = 11。 响应的code = 0,表示执行成功。其顺便也把设置后的值也返回了,如第2个红色箭头。 当我要断言响应内容age = “11”时, 使用: BODY_CONTENT =~ /”age”: “11”/ 此表达式明显不够灵活。 这时可以搭配变量使用。 查看原始图片:[7-p1-多种断言表达式嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/7-p1-多种断言表达式嵌入变量定义.png) ![图表](特性/7-p1-多种断言表达式嵌入变量定义.png) 如下图:A B两处的值均得到相应替换 查看原始图片:[7-p2-多种断言表达式嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/7-p2-多种断言表达式嵌入变量定义.png) ![图表](特性/7-p2-多种断言表达式嵌入变量定义.png) 查看原始图片:[7-p3-多种断言表达式嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/7-p3-多种断言表达式嵌入变量定义.png) ![图表](特性/7-p3-多种断言表达式嵌入变量定义.png) 查看原始图片:[7-p4-多种断言表达式嵌入变量定义.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/7-p4-多种断言表达式嵌入变量定义.png) ![图表](特性/7-p4-多种断言表达式嵌入变量定义.png) ### 特性8 对测试结果备注 **场景** : 假设现在编写了100个case,正好对项目verion 1.0进行测试,测完后,有20个失败,通过确认这个20个均是bug,然后你也提了20个bug。 过几天version 1.1提测了,但只修复了其中的12个bug,还有8个未修复。 当然对100个case执行过后,可能有30+个失败。当然前面的8个也包含其中。 当你对这个30个失败一一确认时,也会再次确认这8个失败,其实这也是在浪费时间。如果能提前对8个失败,做了相应备注,那我在excel表格中,确认bug时,就可以直接跳过。 还是以cgi_demo为例,cmd = “set_age”时,其有效值只能为数字字符串,范围在18-60。其它的值均是非法的。 我设计了下面4个用例,前3个用例中的value值,按有效性检查,其是非法的,期望测试结果应该是“失败” 查看原始图片:[8-p1-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p1-对测试结果备注.png) ![图表](特性/8-p1-对测试结果备注.png) Linux下执行4个用例: 查看原始图片:[8-p2-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p2-对测试结果备注.png) ![图表](特性/8-p2-对测试结果备注.png) 打开测试结果,可以看到。前3个是失败的,同时返回了当前的设置值: 60。 查看原始图片:[8-p3-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p3-对测试结果备注.png) ![图表](特性/8-p3-对测试结果备注.png) 当下次测试新版本时,如果前3个用例发现的bug,还没有修复的话,那我可以对其备注。如下: 查看原始图片:[8-p4-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p4-对测试结果备注.png) ![图表](特性/8-p4-对测试结果备注.png) 如下图,Linux命令行执行时,就直接将备注追加到测试结果后面,打印了出来。 查看原始图片:[8-p5-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p5-对测试结果备注.png) ![图表](特性/8-p5-对测试结果备注.png) 再次查看测试结果确定失败细节时,这里我看到后面有结果备注,那这3个我就可以跳过了,直接去找没有备注且测试结果=“失败”的行了。 实际情况,这个数字肯定是比较大的,而且存在不连续的行中,有此功能,势必增加工作效率。 查看原始图片:[8-p6-对测试结果备注.png](https://gitee.com/xiaojin2630/xls_cgi/blob/master/特性/8-p6-对测试结果备注.png) ![图表](特性/8-p6-对测试结果备注.png) ### 最后 工具使用环境:GNU/Linux + Ruby 如果想excel文件的编辑和脚本的执行配合更加便捷,可以使用Samba配置一个共享目录,存放用例excel文件,这样的话,在Windows系统里可以直接打开编辑,并保存。 在GNU/Linux里,直接指向此文件路径开始执行,省去了使用ftp、sftp等途径。