Posted on

接口测试工具: LazyBug使用手册

A. 系统概览


main

LazyBug(授权协议:GPL)是一款PHP编写的开源HTTP接口测试管理系统,它集成了接口的测试、管理、维护、自动化回归等一系列工作,以实现对测试效率和管理效率的提高。

系统的主要功能包括:

1) 模拟HTTP请求

请求支持使用GET、POST、PUT和DELETE请求方法和x-www-form-urlencoded等8种内容类型,支持自定义的请求头,并可即时查看请求的响应结果,对JSON和XML格式的响应结果还支持以可读性更好的格式化形式展现。

2) 存储和管理接口

可以选择全新创建或将当前调试的URL保存为接口测试,并允许划分多个模块来管理数量较多的接口,单个测试接口可以创建多个包含不同参数和请求头的测试用例。

3) 用例多步骤调用

单个用例支持设置任意数量和次序的测试步骤,可使用的步骤类型包括:调用其他接口、查询数据库和设定检查点,当步骤序列设置完成后还可以即时测试和查看结果。

4) 自动化回归测试

通过配置定时任务可以完成特定用例集的自动化回归测试,任务还允许指定不同的配置包来实化接口或用例中设置的可变参数,配置包可以较好地应对多环境下的用例管理。

5) 命令行任务模式

使用命令行完成指定接口测试任务并输出测试结果以便实现持续集成。

 

B. 安装配置


login

系统基本运行需要完整的PHP+MySQL运行环境,如果启用了定时任务功能,还需要具备Java运行环境。推荐安装的软件版本号:PHP 5.6,MySQL Server 5.6,JRE 7。

详细安装过程如下:

1) 下载完整的系统压缩包: LazyBug (V2.1.0),解压后得到lazyapi和server目录。

2) V3.0正在测试中,可前往https://github.com/hanviseas/LazyBug获取源码。

3) 将服务器站点根目录配置为lazyapi目录(即通过”http://{你的IP}/index.php访问”),并重启Web服务以使修改后的配置生效。

4) 创建名为lazybug(1.x版本为lazybug_api)的数据库,并导入lazybug.sql,注意系统使用的编码格式均为utf-8。

5) 设置/lazyapi/tmp/目录使其具有完全读写权限。

6) 修改/lazyapi/config/database.php文件,并设置数据库相关配置。

7) 上述步骤完成后访问Web页,在正确情况下将看到系统登录页面,初始管理帐号:admin / admin。

8) server目录包含自动化服务所需的文件,在F节中将详细说明。

 

C. 开始测试


start

从本节开始,将全面介绍系统的详细用法。

完整的系统页面大致可以分为三个区域:最左侧为主菜单区域,通过主菜单可以进入各个主要功能页面;上方为头部菜单区域,从左至右分别为个人中心入口、系统配置入口、环境页面入口和退出登录功能;其它部分为功能操作区域,在此区域中可以完成页面相应的功能交互。

用户登录后默认将会进入“开始”页面,在此页面中可以模拟HTTP请求发送,并查看响应结果。

1) 基本信息

该区域用于设置请求最基本的信息。文本框用于输入请求的URL地址,如“http://www.lazybug.cn/”,两个下拉框可以分别选择请求方法和内容类型。请求方法包括GET、POST、PUT和DELETE,内容类型包括application/x-www-form-urlencoded、application/json、application/xml、application/javascript、multipart/form-data、text/plain、text/xml、text/html。

当选择不同的内容类型时,参数会以key-value或文本框的形式展现。其中form-data的值类型可以是FILE(文件上传)。目前系统尚未支持本地文件上传服务器的功能,因此请自行将所需文件传送至Lazybug所在的服务器,而后将服务器端的文件路径作为参数值填入。

如果需要保存当前调试的接口内容,可以点击最右侧的小图标up,页面将弹出保存选项对话框,输入接口名称和用例名称后,即可保存当前页面中已输入的请求URL、请求方法、内容类型、请求参数和自定义头信息至系统中以便后续使用。

2) 接口参数

该区域用于设置请求的参数信息,它分为两个子区域,参数信息区和请求头信息区。每行均代表了将要提交的一个参数(或请求头),左侧文本框用于输入参数名,右侧文本框用于输入参数值。此外,请求头的值还可以选择以文本或数字的方式提交。

当鼠标移至行区域上方时,将出现附加选项,点击clear可以清空当前行中已输入的文本,点击add可以在当前行下方添加新行,点击del可以删除当前行。

3) 响应内容

在用户请求设置完成后,点击“发送”按钮,请求即被发送至目标地址,其响应内容和响应头信息将显示在此区域中。在默认情况下,响应内容会以未加处理的原始文本形式展现,如果它符合JSON或XML标准,还可以通过点击对应格式标签的方式对文本进行格式化,以可读性更强的树状形式展现。

 

D. 接口管理


list

点击主菜单中的“浏览”进入接口管理页面,在此页面中可以完成接口的添加与管理操作。

1) 项目空间(2.0版本新特性)

项目空间用于管理属于多个项目的接口。在项目比较庞大、接口数量较多时,划分空间有助于接口整理。不同空间下的接口完全独立。

点击列表右上方的“切换空间”,可以分别浏览每个空间的接口列表。浏览器会记住用户当前正在查看的空间,并在下次进入“浏览”页面时,再次显示这个空间的内容。

通过点击“空间管理”,可以进入空间管理页面。初始状态下仅有一个“默认空间”,默认空间不能被修改或删除。

如果需要添加项目空间,可以将鼠标移至“默认空间”区域上方,再点击右上角的add2图标弹出添加空间对话框,输入空间名后即可完成空间创建。注意空间名称唯一,不可重复。

当鼠标移至非默认空间区域上方时,将出现附加选项,点击edit2可以编辑空间信息,点击remove2可以删除空间。需要特别注意的是,删除空间后所属的接口和用例将被全部删除。

2) 模块列表

在操作区域左侧显示当前空间的所有模块列表,初始状态下,列表中仅有“全部模块”一项,当查看全部模块时,将不分模块列出全部接口。

如果需要添加自定义模块,可以将鼠标移至“全部模块”区域上方,再点击右上角的add2图标弹出添加模块对话框,输入模块名后即可完成模块创建。注意模块名称(同一空间范围内)唯一,不可重复。

当鼠标移至自定义模块区域上方时,将出现附加选项,点击edit2可以编辑模块信息,点击remove2可以删除模块。

3) 接口管理

接口以分页列表的形式展示。点击接口行区域可以展开当前接口所属的用例列表,再次点击则收起用例列表。接口行分为两列,左列显示接口名称,右列显示接口可用的操作:编辑、移除。如果需要变更接口所属的模块,可以将鼠标移至行首的move图标上,并将其拖动至目标模块区域上方释放。

与接口行类似,用例行也分为两列,左列显示接口的等级(根据图标颜色区分)、用例编号和用例名称,当鼠标位于用例行区域上方时,右列显示用例可用的操作。点击level可以设置用例等级,点击edit3可以编辑用例信息,点击down可以将用例以调试(“开始”页面)模式载入,点击 list可以进入用例步骤设置页面,点击copy可以复制用例,点击delete3可以删除用例。

如果需要手工添加接口,可以点击接口列表下方的“+”弹出添加接口对话框,输入接口名和URL后即可完成接口创建。类似的,如果需要手工添加用例,可以点击已展开的用例列表下方的“+”弹出添加用例对话框,输入用例名和其他信息,即可完成用例创建。

手工添加用例时的请求参数和请求头信息以JSON形式保存(非key-value形式的参数直接填入文本内容),因此为避免意外输入错误,建议使用“开始”页面中的保存功能创建用例。同理,如果需要修改已有用例,可以点击down以调试模式载入,待修改完成后再点击up保存更改。注意接口名称(同一空间范围内)和用例名称(同一接口范围内)不可重复。

 

E. 用例步骤


step

在接口用例的附加选项中点击 list进入步骤设置页面,在此页面中可以根据需要添加任意数量的测试步骤。

1) 步骤管理

初始状态下,步骤列表中仅有一个步骤:调用步骤所属的测试用例自身,并且该步骤无法被删除。当鼠标移至任一步骤行区域上方时,将出现附加选项。点击updown可以上下调整步骤执行顺序,点击edit4可以编辑步骤信息,点击add4可以添加新步骤,点击del4可以删除当前步骤。除了通过updown调整步骤执行顺序外,也可以通过拖动步骤的方式调整。

测试步骤分为三类,接口调用、存储查询和检查点。添加任何一类步骤均需要输入步骤名,该名称将直接显示在步骤列表中。其它需要输入的内容根据不同的类别有所区别:接口调用步骤最为简单,只需选择将要调用的接口及用例即可;存储查询步骤的主要作用在于执行数据库查询以帮助判断测试用例是否通过,它需要输入配置名(将在“配置管理”小节中详细介绍)和SQL查询语句;检查点步骤的选项最多,其主要作用在于判断前序步骤的执行结果是否符合预期,它需要输入匹配模式与校验内容,以及可选的参数提取设定。

2) 检查规则

检查点的匹配模式共有五种。默认状态下为部分匹配模式,例如校验内容为“test”,则检查对象中只要包含“test”文本即可匹配通过;完整匹配模式表示检查对象必须与校验内容完全一致(包含开头和结尾)才能匹配通过;前段匹配模式表示检查对象的开头必须与校验内容一致,例如校验内容为“test”,则检查对象必须是“test”或是以“test”开头的文本串才能匹配通过;后段匹配模式表示检查对象的结尾必须与校验内容一致,含义与前段匹配相反。如果选中了“正则”选项,则表明校验内容的文本是一个正则表达式。此外,还有一个扩展选项“取反”,如果勾选,则表明匹配的结果正好相反,例如匹配的结果为真,那么检查点的结果为假。

检查点检查的对象为上一个接口调用或存储查询步骤的执行结果。例如,在一个接口调用步骤后连续添加多个检查点,则它们的检查对象均为接口调用步骤的执行结果。可以通过检查点中的参数提取功能(将在下一段落中详细介绍),将执行结果做部分提取后再进行匹配。检查点匹配通过与否将直接影响自动化测试报告中的通过状态。需要特别说明的是,如果一个用例步骤列表中没有检查点,那么该用例也是可以被自动化测试调用的,只是它的测试结果永远是通过。

3) 参数提取

在接口URL、用例参数、自定义请求头、检查点的参数提取设置和存储查询的查询语句(以下简称“替换范围”)中均可以设定参数,以便从前序接口调用或存储查询的执行结果中提取指定的文本。可用的参数有:

${extractor:global}(1.x版本为${extend:global}),它用于提取执行结果中的全部文本。例如,在用例步骤列表中,调用用例Y紧随在调用用例X之后,调用用例X的执行结果为“lazybug”,那么在调用用例Y时替换范围内所有的${extend:global}均会被替换成lazybug。

${extractor:json:a->b;}(1.x版本为${extend:json:a:b}),它用于提取执行结果(必须是JSON格式)中/a/b位置的值(请勿遗漏末尾的分号),如同上例,调用用例X的执行结果为“{“a”:{“b”:”lazybug”}}”,那么在调用用例Y时替换范围内所有的${extractor:json:a->b;}均会被替换成lazybug。

${extractor:xml:/a/b;}(1.x版本为${extend:xml:/a/b}),它用于提取执行结果(必须是XML格式)中/a/b节点的值(请勿遗漏末尾的分号),如同上例,调用用例X的执行结果为“<a><b>lazybug</b></a>”,那么在调用用例Y时替换范围内所有的${extractor:xml:/a/b;}均会被替换成lazybug,示例中”/a/b”位置可以使用任意XPATH表达式。

${extractor:regexp:e(x)p:m:n;} (2.0版本新特性),它用于提取执行结果中符合正则表达式exp的第m个括号的第n次匹配,如同上例,调用用例X的执行结果为“Hello World!”,那么在调用用例Y时替换范围内所有的${extractor:regexp:o(.):1:2;}均会被替换成r(跟在o之后的字符,且第二次匹配),注意正则表达式中如果包含特殊字符需要做转义。

4) 功能函数(2.0版本新特性)

系统提供了部分功能函数用于特殊用途,这些函数可以在接口URL、用例参数、自定义请求头和存储查询的查询语句中使用。可用的功能函数有:

${function:rand(n)},该功能函数将随机生成n位整数。

${function:randc(n)},与rand相似,不同的是它随机生成的是英文字母。

${function:time(s或m)},该功能函数将生成当前的系统时间戳,有两个可能的参数。当参数值是s时,生成的是秒数。当参数值是m时,生成的是毫秒数。

5) 执行测试

步骤设置完成后,通过点击下方的“保存”按钮保存设置。只有已保存的步骤序列才可以点击“测试”按钮进行即时测试,而对步骤产生的任何修改(修改发生时,“保存”按钮将处于高亮状态)都需要重新保存才能执行测试。

即时测试使用的是预设配置包(将在“配置管理”小节中详细介绍),后续版本将支持指定自定义配置包。

 

F. 配置管理


config

点击主菜单中的“设置”进入配置管理页面,在此页面中可以完成配置的添加与管理操作。

1) 配置包列表

配置包主要用于在不同的应用环境下,实现测试用例的可变性。例如,某接口在内部环境的URL是”http://my.local.lazybug.cn/api/test”,而在正式环境的URL是”http://www.lazybug.cn/api/test”,它们的测试用例很有可能完全相同。在正常情况下,如果同时需要测试内部环境和正式环境,就不得不为其创建两个不同的接口和两套对应的用例,而它们之间的区别仅仅是接口URL有所不同。而通过将可变部分参数化成”http://${param:$key}.lazybug.cn/api/test”的形式,并分别为两个环境创建不同的配置包并各自指定$key的值,就可以在不增加额外接口和用例的情况下,将测试任务映射到不同的环境。

初始状态下,列表中仅有“预设配置”一项,并且预设配置包不能删除。每个配置包都包含参数和数据源两种类型。参数类型设定的配置项用于替代接口URL、用例参数、自定义请求头、存储查询的查询语句和检查点的预期值(以下简称“替换范围”)中设为${param:$key}的部分。例如,在配置包中创建一个关键字为user,值为lazybug的配置项,那么在应用此配置包的测试任务中,替换范围内所有的${param:user}均会被替换成lazybug;数据源类型设定的配置项用于指定存储查询步骤中将要连接的数据库。当执行存储查询步骤时,将由提供的配置关键字查找相应的配置值,并根据值中设定的连接类型和连接字符串完成数据库连接。

如果需要添加自定义配置包,可以将鼠标移至“预设配置”行区域上方,再点击右上角的add2图标弹出添加配置包对话框,输入配置包名后即可完成配置包创建。注意配置包名称唯一,不可重复。

当鼠标移至自定义配置包行区域上方时,将出现附加选项,点击edit2可以编辑配置包信息,点击remove2可以删除配置包。新创建的配置包默认以非展开的状态显示,只需点击配置包行区域,即可展开当前配置包的配置类型列表,再次点击则收起配置类型列表。

2) 配置管理

配置项以分页列表的形式展示。配置行分为三列,左列显示配置关键字,中间列显示配置值,最右列显示可用的操作:编辑、移除。

当需要添加配置项时,可以点击配置列表下方的“+”弹出添加配置对话框。参数类型和数据源类型需要输入的字段不同:参数类型只需输入关键字和值,而数据源类型需要输入关键字、数据库连接类型和连接字符串,在列表中展现时,后两项会自动拼接为JSON格式的值。

数据库连接类型的支持需要PHP安装和启用相应的模块,例如mysql (pdo)连接类型需要启用pdo_mysql。查看是否支持某个模块可以点击页面右上方的“环境”(即phpinfo信息),并查找是否已有相应模块。

连接字符串根据不同的数据库有所不同,可以参照如下形式:

  • Mysql:server=$ip;user=$u;password=$p;database=$db;charset=utf8
  • SQLSvr:server=$ip;user=$u;password=$p;database=$db;charset=utf-8
  • Oracle:server=$ip/ORCL;user=$u;password=$p;charset=utf8

 

F. 定时任务


run

点击主菜单中的“运行”进入任务管理页面,在此页面中可以完成任务的添加、管理与运行。

1) 任务管理

如果希望使用定时任务功能,需要先启动任务监管服务。打开安装包中的server目录,修改config.xml文件,将remote节点中的文本内容改成布署在本地的接口测试系统的URL,而后再运行“java  -jar server.jar”命令启动任务。如果交互界面中可以看到“服务已准备就绪”的字样,则表示服务已正确运行。注意config.xml与server.jar必须放在同一目录下。

初始状态下,列表中没有任何任务,点击“+”可以添加新任务。添加新任务需要输入任务名(唯一不可重复)、所使用的配置包、测试的模块范围和等级范围、任务预定执行的时间。用例等级由高至低分别为A、B、C、D,“C+”表示C等级或比C更高等级的用例,即等级为A、B、C的用例集合。任务添加完成后将以分页列表的形式展示,每个任务在它的最上方均显示出名称、执行时间、配置包和操作项。

任务共有五个可操作项,点击“begin”可以手动运行任务,点击“end”可以停止当前正在执行的任务,点击“add5”可以添加新任务,点击“edit5”可以编辑任务,点击“lock”可以锁定或解锁任务,点击“remove5”可以删除任务。锁定的任务仍然可以以手动的方式执行,但不会被自动化程序调用。执行中的任务边框将以绿色高亮显示,锁定的任务边框以红色高亮显示。

在任务监管服务正常运行的情况下,任务将会在指定时间被调度执行并发送邮件通知,可点击右上方的“系统”设置邮件地址列表和SMTP服务。无论手动或自动执行的任务,都将生成相应的测试报告。

2) 测试报告

每个任务可以显示三条最新的任务报告记录,后续版本将调整为允许查看全部历史记录。每个报告记录行显示了报告生成的时间、检查点的通过数和失败数。通过点击最右侧的“查看详细报告”链接可以进一步查看详细的报告内容。

为方便查看和浏览,报告详情页面默认只展示到用例层级,并会显示该用例是否测试通过。如果需要查看测试用例的详细执行结果,可以点击用例行区域,页面将展开显示此用例包含的步骤列表,再点击步骤行区域,即可展开显示该步骤的执行结果。

3) 命令模式(2.1版本新特性)

系统提供命令行调用的方式来运行指定任务,以便将接口测试加入到持续集成。可以通过运行“java -jar server.jar -task {你的任务数字编号}”来执行特定的测试任务,数字编号可以在定时服务的日志中看到,或通过查看任务HTML源码Div元素的ID属性值最后一位数字获得。

 

G. 用户管理


user

点击主菜单中的“用户”进入用户管理页面,在此页面中可以完成用户的添加与管理操作。

用户以分页列表的形式展示。初始状态下,系统中仅有一个admin管理帐号,默认密码为admin。用户行分为三列,左列显示用户名(登录名),中间列显示用户所属的权限组,最右列显示用户可用的操作:编辑、移除。

当需要添加用户时,可以点击用户列表下方的“+”弹出添加用户对话框,输入用户名、密码和权限组即可完成用户创建。如果在添加用户时不输入密码,系统将为新用户分配一个默认密码:888888。与此类似,当编辑用户时,如果不需要更改密码,在密码文本框中则不应输入任何内容。

帐号的权限共有三类:系统管理员、测试维护和普通用户。系统管理员拥有系统的全部可操作权限;测试维护拥有除用户管理以外的权限;普通用户只能查看所有页面的列表、手动执行任务、查看测试报告,而没有任何修改权限。

 

 


关键词: 接口测试系统 / 接口测试工具 / 接口自动化

安装、使用支持请联系QQ号:32944123

18 thoughts on “接口测试工具: LazyBug使用手册

  1. 环境搭起,照着详细安装6步骤,最后一步访问web提示服务器错误500,我随便写了一个test.php文件,访问是正确的(说明,我用的环境是的php7+nginx1.8)

    1. 可以检查一下数据库配置和Rewrite设置

  2. 太长了 看的吐血

  3. 作者你好,我在mac上使用mamp搭建LazyAPI 的环境,运行其他php的项目没有发现问题,使用Apache+mysql+php5.6
    按照说明的方式,我把lazyapi和lazybug复制到web服务器的目录当中。
    但是运行LazyAPI时,提示500错误,然后我在.htaccess文件中

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]

    index.php后面增加了一个?,请求http://localhost:8888/lazyapi/,所有的静态资源都会加载失败,

    我哪里的设置出问题了吗?

    1. 抱歉,贴html代码,都没显示出来,路径都是请求的类似这样的直接从根目录读取静态资源了,/static/js/public/404.js?version=20140101

    2. lazyapi是站点主目录,lazybug是PHP框架,它们保持同级,根据你的描述,是由于根目录未设在lazyapi目录,因此定位不到lazyapi/static,只要将DocumentRoot指向lazyapi目录即可,之后使用http://localhost:8888/访问,还有一种办法,修改config目录下的static.php文件,手动指定静态文件目录为”/lazyapi/staitc/”

      1. 抱歉回复有点晚,设置成DocumentRoot可以了,但是修改config目录下的static.php文件,不可以,虽然外链的js 和css正常了,但是页面html中获取的地址还是有问题。

        再次感谢!

  4. 多谢作者,一次搞定!正在摸索如何对公司API进行日常管理!

  5. 你好,这个支持ci吗

    1. 有一个外部API可以调用任务,将其添加到CI系统执行脚本中即可

  6. 我用的WAMP环境装好后,打开http://localhost/lazyapi/index.php 显示是的是两个破裂的小图和一个数字5,其中第一个裂图链接到http://localhost/index.php

    1. 将lazyapi目录下的文件全部移到根目录即可,换句话说就是通过http://localhost/index.php访问

  7. 不知道什么原因,遇到两个问题
    1、创建了的定时任务没能按时执行
    如果在本地可以看到异常的log就好了
    2、任务执行完了,一直等不到邮件通知

    1. 定时任务需要运行server.jar,邮件通知也是依赖于此
      若还有问题,加QQ:32944123

      1. server.jar有执行记录,还是没有等到邮件通知,邮件密码是授权码还是真实密码

        1. 真实密码

  8. 检查点
    返回数据 json { “a”:”abcdefg”,”b”:”” }
    编辑检查点: 参数提取 ${extractor:json:a;}
    选中正则
    校验内容: abcd

    结果会报失败。

    问题:
    参数提取 ${extractor:json:a;} 没有提取到 a对应的值吗

    1. 是个BUG,重新下载,替换更新server.jar就可以了

LazyBug进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注