话说,测试玩不利索的CV算法工程师,不是一个好的炼丹师。所以这篇主要记录使用Postman的过程。使用Postman的起因,是因为OCR服务已经搭起来了,但通过Post请求图片的批量测试,是一个很麻烦的事情,没有特别趁手的测试工具,测试大佬们也很难push,所以就自己简单搭一个,以后变更服务时,测试起来也比较方便。
Postman也是来自谷人希,似乎无论是做工程,还是搞算法的,都绕不过谷歌这座庞然大物。Postman mac dmg安装非常方便,再次不赘述了。本文参考了[1][2][3]。
任务描述
我这边想使用Postman想要达到的目标有两个:
目标一:通过迭代方式,自动生成多张图片的Request请求,并返回结果。
目标二:解析Response Json状态码,统计结果
Postman两个模块
Postman能用到的两个模块,分别是Collection和Runner。
Collection主要用于Request请求的配置,包括Post/Get等。Runner就是在配置完成后,用于对特定Request进行批量测试的模块。所以这里在Postman Collection 中配置,详细过程可参考[1]这里不再赘述。
在基本的Collection 和 Requset创建完成后,为了达到图片名自动变更的目的,有以下几个地方需要加以区别。
Collection & Request
-
图片命名
第一批的图片是39张,为了方便图片名根据迭代自动生成,我做了处理,命名为01.jpg~ 39.jpg,这样较为规律的命名,便于迭代时变更。 -
Globals
Globals 是全部变量,点击右上角,Request选框右侧,有小眼睛的图片,里面就可以直接配置Globals。我这里配了6个,都是以g_***为规范。
如 g_image_name 这个变量的INTIAL VALUE,CURRENT VALUE都配置为0,等一会儿用作变化的图片名。其他还命名了g_imageUrl,g_serviceCode,g_cardType等等。需要注意的一点是,全局变量的值,会随着迭代而增加,所以现在设置的值,并不是固定不变的。 -
Params
Params在POST
按钮的下面,这里面用于配置POST请求中用到的变量,如下。Key中填写的字段会体现在POST请求中,而VALUE中的这些以g_*开头的值,在Globals中配置。最后POST后面会生成`{{base_url}}?serviceCode={{g_serviceCode}}&imageUrl=\ {{g_imageUrl}}/{{g_image_name}}.jpg&cardType={{g_cardType}}&uicId=\ {{g_uicId}}
-
Pre-request Script
Pre-request Script 这个脚本框,主要用于编辑请求发送之前的操作,如下图所示,图来源[2] 。
在我们这个需求中,主要是希望图片名g_image_name可以自动变更,所以代码如下://获取全局变量 var temp = parseInt(postman.getGlobalVariable("g_image_name")); //自增 temp += 1; //命名 1.jpg -> 01.jpg if(temp < 10){ temp_str = "0"+temp }else{ temp_str = temp } // 设置回全局变量 postman.setGlobalVariable("g_image_name", temp_str)
就完成了g_image_name的自增。
-
Tests
Tests Script 如上图,用于统计返回结果的状态。我这边Json的返回时,正确代码是0,错误代码是-444,如下:{ "code": 0, "msg": "Success", "data": { "data": { … } } }
{ "code": -444, "msg": "Failed", "data": { "data": { … } } }
所以为了收集正确的结果,我代码这写的:
这部分参考的是[3]var jsonData = pm.response.json(); pm.test("识别成功", function () { pm.expect(jsonData.data.code).to.eql(0); });
Runner
Runner从上面配置好的Collection进入。
这里是测试运行的部分。进来之后,可以在左侧栏配置相应的信息,如下图。
其中iterations参数指定要进行多少次请求,我这边有38张图片,所以38就可以完成所有的测试。跑完的结果在右侧就能看到了,End。