| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> locust实战教程2-测试需求拆解和代码设计 -> 正文阅读 |
|
[Python知识库]locust实战教程2-测试需求拆解和代码设计 |
? ? ? ? 本来是想从项目的业务模型来慢慢介绍到需求拆解的,但是转念一想:作为测试人员,自己应该清楚每个人都测试过好多项目,对于我们来说,项目都是大同小异的,具体到测试时都是按功能点划分的,既然这样,那我就按照写测试用例的方式将需求拆解并组织代码设计,这样更加符合测试人员的习惯。【具体流程不会一个个去讲,这样太啰嗦了,会调出典型的来解读,其他的都大同小异】 一、下面4点太长可不看,可以看后面具体会实现哪些功能 1、测试数据准备和清理,即tear_up和tear_down ? ? ? ? 即要模拟创建出需要的虚拟用户(设备),并在测试结束时删除掉这些数据,之所以要介绍一遍,是因为我的常用作法是将这个过程单独拎出来,不放在整个测试流程中,因为不同项目,测试数据的创建时间不同,且测试一遍后也没必要立即清理,所以建议放在单独文件中,与测试代码隔离开 2、登陆过程,即一个典型的挑战登录(即第一次登陆会拿到一个值,然后按照约定的方式重新计算,再请求一次)过程,不同的是拿到的token过期时间有点快,需要1h内通过一个接口拿回一个新token,老token将会失效,该token不光在请求内带上,一些接口的url就是用token拼接的,说到这,如果要用jmeter实现的话,当然能做到,但是必然要花费一番功夫的 3、由于要接受到服务器的主动推送,所以后端要求客户端得建立websoket连接,因此需要建立连接,收发消息 4、需要调用sdk来发送视频流,这个则涉及到python调用c接口的问题,当然这个也可以是等远程调用,考虑到这个十分耗费服务器资源,可以将其放到其他服务器,将接口封装后以常用的服务接口形式暴露,这样就可以当做一个服务器的接口处理即可,当然这个服务需要一定的耐心去完成 上面说了一堆看起来十分长的废话,实际上也只是整个工程一小部分,最终目的还是为了引出下面的代码设计和需求拆解: 1、我们要实现一个可以定时刷新token的功能(开一个线程定时刷新),并且在任意地方获取到这个token(一个简单的get_token函数) 2、一个稳定的websoket连接,而且要考虑到某些模拟用户意外断开连接后的处理 3、对于耗费服务器资源或者不好在python工程中处理的东西,可以将繁琐的东西转换成简单的接口暴露出来,对于我们来说,看做一个测试流程的接口即可 二、避开一些常见的坑 1、locust版本问题,如果你搜索其他博客,会发现一些代码demo会报错,这个确实是locust的问题,哪有更新版本将一些关键的类名和方法名直接改了,在这里也不列举了,直接用新版或者指定老版本安装即可(我用的是新版,locust -V? locust 2.1.0) 2、接下来都是和版本无关的 # 继承HttpUser(Locust User FastHttpUser)的类则代表一个用户
#?通过@task来定义一个行为,用户可以包含多个行为
#?@task中的行为可以是异步也可以是同步的(同步的则会阻塞直到结束或者return) #?web界面中?Number?of?users?to?simulate:?用户数? #?Spawn?rate?(users?to?start?per?second?(or?stop)):每秒用户上线速度?小数如0.1?则代表间隔10秒上线一个用户 #?用户上线完毕后,会循环用户里定义的task任务 #?wait_time?=?between(30,?50)?设置task之间的运行时间间隔 #?要模拟用户只执行一次task?可以用SequentialTaskSet?在最后一个task?定义一个time.sleep到测试结束 #?指定主机?locust?-f?test.py?--master??指定测试机?本机的话直接带worker即可?目的是为了使用多核cpu?locust?-f?test.py?--worker #?locust?-f?test.py?--web-host=127.0.0.1?运行locust的机器为多网卡时可以指定网卡 这些东西一下子感觉有点杂,实际都是常用的模块,至于怎么用,会在后面具体实现中单独讲解的 三、代码设计解读 (备注:代码工程会在检查后确保不会有其他项目信息后上传) ?整个工程目录如图所示 1、我的项目是模拟一些box,那么我将这个box有关的接口放在一起,即项目中的一些业务接口 2、sdk则是上面说到的需要将其做成一个接口给测试程序调用的那个,即第三方模块 3、test_model_global 则是都要用的东西,比如配置文件读取,挑战登陆的流程,项目中要求的一些封装,自己对于request请求的封装(例如对接口返回值的解析,自动带上token的请求等等) 4、test_thread 测试线程,主要是对于需要一直要做的事务用一个线程单独一直运行,例如刷token,websoket消息的收发 这样一来,比起jmeter,确实更像一个可以维护,多人参与的工程了 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 13:05:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |