simple_pref_test是lljz-tools包中的一个模块
安装
pip install lljz-tools
使用简介
1、函数模式
以下为最基础的用法
import requests
from lljz_tools.simple_pref_test import PrefRunner, task
@task
def get_baidu():
resp = requests.get('http://www.baidu.com)
assert resp.status_code == 200
if __name__ == '__main__':
PrefRunner(
'性能测试',
virtual_users=5, user_add_interval=0.1, # 5个线程,每隔0.1秒启动1个线程,与pre_task参数互斥
# pre_task=5, # 每秒固定执行5个任务,与virtual_users、user_add_interval参数互斥
run_seconds=10
).start()
实际上只要给任意个函数增加@task
装饰器,那么这个函数就自动被识别为性能测试任务。
task
装饰器也可以包含参数,
@task('获取百度页面', weight=1)
def get_baidu():
resp = requests.get('http://www.baidu.com)
assert resp.status_code == 200
第一个参数为任务名称,会在最终的测试报告中显示出来(没有指定名称的任务默认取函数名称),weight
参数表示任务权重,当包含多个任务时,会按照权重随机选择执行一个任务。
默认情况下,我们无法控制任务的执行顺序,因为任务每次都是随机执行。当需要将多个任务严格按照顺序执行时,则可以采用@mark_task
标记一个顺序任务
from lljz_tools.simple_pref_test import task, mark_task
@mark_task
def my_task():
@task('获取订单')
def get_order() -> int:
reps = requests.get('http://127.0.0.1:5000/get?orderNo=123')
assert reps.status_code == 200
return reps.json()['id']
@task('审核订单')
def audit_order(order_id: int) -> None:
reps = requests.post('http://127.0.0.1:5000/audit', json={'orderId': order_id})
assert reps.status_code == 200
order_id = get_order()
audit_order(order_id)
@mark_task
也适用于需要更精确的记录请求耗时的场景
from lljz_tools.simple_pref_test import task, mark_task
@task
def t1():
# 该任务统计耗时会计算整个函数执行耗时,如果get_order_from_db耗时较长,则会对结果产生较大的影响
# (一般非IO型的步骤执行耗时远远低于IO耗时,因此无需担心最终统计的任务耗时准确性)
order = get_order_from_db()
reps = requests.post('http://127.0.0.1:5000/audit', json={'orderId': order.id})
assert reps.status_code == 200
@mark_task
def t2():
# 将不需要统计耗时的步骤单独配置
order = get_order_from_db()
@task
def audit_order(order_id: int) -> None:
# 最终任务只会记录audit_order的函数执行耗时
reps = requests.post('http://127.0.0.1:5000/audit', json={'orderId': order_id})
assert reps.status_code == 200
audit_order(order.id)