前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >灵活解决测试中遇到的问题——记一次不寻常的测试经历

灵活解决测试中遇到的问题——记一次不寻常的测试经历

作者头像
用户5521279
发布2019-10-14 16:23:50
3600
发布2019-10-14 16:23:50
举报
文章被收录于专栏:搜狗测试搜狗测试
最近进行了输入法语音识别相关的一些测试,其中有一个测试内容十分有意思,让小编忍不住想来分(tu)享(cao)一下。

这个内容大体上是这样的,输入法语音识别想通过分析个性化词库来提高识别准确率,因此需要将词库文件传递给后端服务,并由服务端返回命中热词的信息给客户端。

初步看,这个功能很简单,无非就是在客户端的请求内容中添加一个词库参数,测起来会比较容易。而仔细看了看手头的测试集和工具,却发现这里面有个很大的问题。因历史原因,输入法这边的测试用客户端(demo)工具与实际使用的客户端存在一些联系,代码部分不好单独分离,所以暂时由开发负责维护。而这个客户端有个很不好的地方,它是以配置文件的形式进行参数传递,而且配置文件的路径和名称都是写死在代码里的(此处必须要吐槽)。再看我们准备的测试集,有几百个不同的词库id和对应音频。出于模拟线上真实情况和分析数据的考虑,需要同时使用不同的词库id和音频文件进行测试。

这时,摆在面前的问题是:

1、测试工具存在先天不足,无法灵活传递参数,如需改变参数,则需要修改配置文件。如果是一两个不同的参数组合,我们尚可手动进行修改,而如今需要大量不同的参数组合,手动修改显然不现实;

2、测试时需要同时使用不同的参数组合进行测试(模拟多用户同时使用服务)。

首先考虑测试工具是否能进行更新,满足本次测试的需求。与开发进行了一番沟通,确定该测试工具短时间内无法进行修改更新。而测试需要进行下去,看来只能另想办法来解决问题了。

第一步需要理清思路。

简单来讲,面前有两个问题,一个是修改配置文件的问题,一个是同时使用不同的配置进行测试的问题。两个问题需要一个一个解决。

第一个问题比较好解决。该工具使用的配置文件是json格式的参数,而所需要的参数我们都有,因此只需要按照格式,根据不同的词库id和对应的音频列表批量生成即可,这里可以使用python脚本。生成后文件可以存起来备用,使用时直接copy覆盖到工具的配置文件上即可。这样,在测试时就免去了来回手动修改配置文件的烦恼。

生成的部分配置文件

代码语言:javascript
复制
#coding=utf8
import sys,codecs,os
import json
audio_list_path=sys.argv[1]
key=sys.argv[2]
configs={
"key1":key,
"key2":"value2"
}
if os.system('cd %s && ls | sed "s:^:`pwd`/:" > `cd -`/list.txt'%(audio_list_path))!=0:
  print "get audio list error!"
  sys.exit(0)
fd=open("list.txt","r")
for l in fd.readlines():
    configs['audio_file_names'].append(l.strip())
fw=codecs.open(audio_list_path[audio_list_path.rfind('/'):] if audio_list_path.rfind('/')>=0 else audio_list_path,"w","UTF-8")
fw.write(json.dumps(configs))
fd.close()
fw.close()

生成配置文件的python脚本(不完整,仅做参考)

而第二个需要同时使用不同参数的问题相对较为复杂,曾经,在参数组合比较少且数量固定的情况下,可以通过将测试工具复制多份,分别设置配置文件参数,最后一起运行的方式来解决。而现在,需要使用更多的参数组合,且同时运行的数量不确定(取决于需要的并发数),因此不宜使用原来这种复制多份的方式。

这时,测试工具读取配置文件的方式引起了我的注意。之前与开发沟通,测试工具每次运行只读取一次配置文件存入内存之中,之后不会再次进行读取。也就是说,此时对配置文件进行修改,对之前已经运行的程序并无影响,如果再次运行程序,程序会按照新修改的配置文件来运行。

结合刚才解决的配置文件生成的问题,实际上这个问题也就能够解决了。整体的思路是,将上一个问题中的配置文件一个个copy到测试工具的配置文件上,然后运行程序。就这样copy,run,copy,run...直至需要的数量(并发数)。这个步骤同样可以使用python脚本来自动化实现,为了方便,可以提前准备一个配置文件列表,保存够需要的数量(并发数)即可。

如图:使用30个配置文件实现30并发数,每路词库和音频不同

代码语言:javascript
复制
#coding=utf8
import sys,os
import time
fn=sys.argv[1]
fd=open(fn,"r")
for l in fd.readlines():
    if os.system('cp -f %s config/online_asr_tester.json'%(l.strip()))!=0:
        print "copy config file error!"
        sys.exit(0)
    if os.system('nohup ./demo_online_asr_tester > %s.log 2>&1 &'%(l.strip()))!=0:
        print "run error!"
        sys.exit(0)
    time.sleep(5) 
fd.close()

实现自动化执行的python脚本

如此一来,便完全解决了本次测试中所遇到的问题。

最后,来总结一下~本次测试中遇到了一些困难,主要是来自测试工具方面的问题。特点是,不能从问题的源头来解决问题。这时,便需要我们灵活思考,积极改变思路,从其他方面入手,换个角度来应对所面临的困难。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档