接口测试实战:Jmeter与Python结合测试初始化接口场景


关注我,每天分享软件测试技术干货,面试经验,想要领取测试资料,进入软件测试交流群的可以直接私信我哦~~

一、测试场景

压测“用户登陆”的场景,在用户登陆后,会调用大量的接口,以便测试该场景的负载

二、采用过的方案

方案1。直接使用Jmeter接口压测,但Jmeter在一个线程中的调用多个接口是同步的,故压测出来的结果不准确。

方案2。Jmeter用多个线程组压测,但这种方案压测出来是并行的,并不符合场景,因为浏览器虽然是初始化调用,但本质上也是一个线程执行。

三、最终方案

Jmeter结合Python3.x的asyncio和aiohttp结合。

因为Python的asyncio可模拟浏览器的初始化调用方式

四、用例设计

1步[User]:使用CSV数据配置读取用户名和密码

2步[加密密码]:使用BeanShell调用加密的JAR为密码加密

3步[登录临床页面]:登陆系统

4步[登录设计]:选择登陆类别

五核心实现

Jmeter部分

使用到的组件:事务控制器,HttpSampler,BeanShell采样器,响应断言

交易控制器

有两部分组成

  1. HttpSampler

这部分用户名和密码登录校验接口

  1. BeanShell采样器

说明:为什么使用BeanShell Sampler而不是JSR,因为JSR不支持Python 3.x

关键代码说明:

1:预设Python的参数

#访问的服务器地址

字符串主机=“ 200.200.101.97”;

#执行的Python文件

字符串pyPath =“ D:\\ sites \\ eClinical4.0_testing \\ PT \\ py_script \\ asyncio_http.py”;

#需要异步初始化的接口,配置在一个json文件中

字符串apis =“ D:\\ sites \\ eClinical4.0_testing \\ PT \\ py_script \\ admin_login_api.json”;

2:启动Python过程

8-10行

3:等待Python进度返回,并把结果保存在变量” $ {name} _admin_login”中

11-23行

回应断言

通过字符串判断Python的返回,如果所有接口返回正常,则变量” $ {name} _admin_login”包含API OK

Python部分

1.使用的库

导入json

导入aiohttp

导入系统

导入异步

2.根据需要访问的接口,生成初始任务,并调用

异步定义async_run(host,apis,headers):

结果= []

协程= []

对于apis.values()中的信息:

如果info.get(“ method”)==“ GET”:

coroutines.append(asyncio.create_task(get(“ {0} / {1}”。format(host,info.get(“ url”)),headers,info.get(“ params”),results))))

elif info.get(“ method”)==“ POST”:

coroutines.append(asyncio.create_task(post(“ {0} / {1}”。format(host,info.get(“ url”)),headers,info.get(“ params”),results))))

其他:通过

等待asyncio.gather(*协程)

退回结果:

如果type(ret)==例外:引发ret

最后2行,如果返回的Exception,则引发异常

3.封装Post,Get请求,大同小异,故只贴出Get请求

异步def get(url,headers,params,results):

与aiohttp.ClientSession()作为会话异步:

与session.get(url,headers = headers,json = params)异步为rsp:

r =等待rsp.text()

ret = json.loads(r)

如果ret.get(“ procCode”)!= 200:

e = Exception()

e.args =(“ {0} {1}”。format(ret.get(“ procCode”),url),ret.get(“ exception”))

results.append(e)

别的:

results.append(ret)

如果接口返回不正正确!= 200,则生成一个异常实例,保存在结果中,如果返回正常,则将返回结果直接保存在结果中

4.主要函数

host =“ http:// {0}” .format(sys.argv [1])

授权= sys.argv [2]

apis_path = sys.argv [3]

与open(apis_path,“ r”)为f:

apis = json.load(f)

标头= {

“授权”:授权,

“ Accept”:“ application / json,text / plain,* / *”,

“ Content-Type”:“ application / json”

}

尝试:

asyncio.run(async_run(host,apis,headers))

打印(json.dumps(dict(procCode =“ API OK”)))

例外,例如e:

如果len(e.args)== 1:print(json.dumps(dict(procCode = e.args [0])))

其他:print(json.dumps(dict(procCode = e.args [0],exception = e.args [1])))

根据jmeter的参数来配置执行参数和读取json文件

如果无错误,则通过print输出到jmeter

如果有错误,错误参数有1个,为网络错误,通过print输出

错误参数有2个,为接口返回,通过print输出


最后:软件测试资料分享一波!

技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

金九银十面试季,跳槽季,整理面试题已经成了我多年的习惯!下面有我近几年的收集和整理,整体是围绕着【软件测试】来进行整理的,主体内容包含:python自动化测试专属视频、Python自动化详细资料、全套面试题等知识内容。

愿你我相遇,皆有所获! 如果对软件测试、接口测试、自动化测试、面试经验交流。关注微信公众号:【伤心的辣条】 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!交流学习裙:313782132

推荐好文:

包装成1年工作经验的测试工程师,我给他的面试前的建议如下

自动化测试到底要学什么?

为何跳槽不考虑腾讯?聊聊我和鹅厂的一点往事

自动化测试和手动测试哪个更高级?

新手必看:怎么写一个合格的测试用例?

python登录接口测试问题记录与解决 ( 干 货 )

猜你喜欢

转载自blog.csdn.net/weixin_50829653/article/details/113989737