关于性能优化:性能工具之locust工具get与post请求

5次阅读

共计 4482 个字符,预计需要花费 12 分钟才能阅读完成。

最近在学习 locust 性能工具,发现 locust 性能工具脚本须要 python 根底能力写脚本,然而对于性能测试人员来说 python 是根本功夫。

在 locust 中 get 脚本怎么写,为了不便间接在代码运行调试,采纳敞开 web 模式,通过参考官网文档本人试验 get/post 代码,参考代码如:
@task(1)

def get_7dTest(self):
    # 定义申请头
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
    response = self.client.get("/7d/", headers=header, verify=False)
    # print("Response status code:", response.status_code)
    if response.status_code == 200:
        print("successful")
        # print("Response text:", response.json())
    else:
        print('failure')

post 申请写法如下
# 登陆

@task(1)
def get_login(self):
    response = self.client.post("/login", {"userName": "7d", "passWord": "123456"})
    print("Response json:", response.json())

后果:

后果:

[2021-04-24 21:36:49,495] liwen.local/INFO/locust.main: Run time limit set to 1 seconds
[2021-04-24 21:36:49,495] liwen.local/INFO/locust.main: Starting Locust 1.4.4
[2021-04-24 21:36:49,496] liwen.local/INFO/locust.runners: Spawning 1 users at the rate 1 users/s (0 users already running)…
[2021-04-24 21:36:49,496] liwen.local/INFO/locust.runners: All users spawned: webTestDunShan: 1 (1 total running)
[2021-04-24 21:36:49,496] liwen.local/INFO/root: Terminal was not a tty. Keyboard input disabled

Name # reqs # fails | Avg Min Max Median | req/s failures/s


Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00

Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}
successful
Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}
Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}
Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}
Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}

post 申请 json 申请写法:
@task(1)

def get_login_json(self):
    jsonData = {"userName": "7d", "passWord": "123456"}
    response = self.client.post("/login/json", json=json.dumps(jsonData))
    print("Response json:", response.json())

后果

Response json: {‘msg’: ‘success’, ‘code’: 0, ‘data’: ‘ 登陆胜利 ’}

试验申请资源代码:

@GetMapping("/7d")
@ResponseBody
public R indexPage() {HashMap<String, Object> map = new HashMap<>();
    map.put("success", "欢送来到性能实战课堂");
    map.put("Data", new Date());
    return R.ok().put("data", map);
}

/**

 * 登陆
 *
 * @param memberEntity
 * @return
 */
@PostMapping("/login")
@ResponseBody
public R login(MemberEntity memberEntity) {if ("7d".equals(memberEntity.getUserName()) && "123456".equals(memberEntity.getPassWord())) {return R.ok().put("data", "登陆胜利");
    }
    return R.error().put("data", "用户名或者明码失败");
}


/**
 * 登陆
 *
 * @param requestBody
 * @return
 */
@PostMapping(value = "/login/json", produces = "application/json")
@ResponseBody
public R login_json(@RequestBody String requestBody) {log.info("json 数据:{}", requestBody);
    Object parse = JSON.parse(requestBody);
    MemberEntity memberEntity = JSON.parseObject(parse.toString(), MemberEntity.class);
    if ("7d".equals(memberEntity.getUserName()) && "123456".equals(memberEntity.getPassWord())) {return R.ok().put("data", "登陆胜利");
    }
    return R.error().put("data", "用户名或者明码失败");
}

locust 间接在 python 代码调试代码敞开 web 页面,这样调试很不便,参考如下命令:

os.system(“locust -f demoLcou.py –host=http://127.0.0.1:8080 –headless -u 1 -r 1 -t 1s”)
# –no-web 示意不应用 Web 界面运行测试。
# -c 设置虚构用户数。
# -r 设置每秒启动虚构用户数。
# -t 设置设置运行工夫。

# 后果参考:
[2021-04-24 22:23:59,688] liwen.local/INFO/locust.main: Run time limit set to 1 seconds
[2021-04-24 22:23:59,688] liwen.local/INFO/locust.main: Starting Locust 1.4.4
[2021-04-24 22:23:59,688] liwen.local/INFO/locust.runners: Spawning 1 users at the rate 1 users/s (0 users already running)…
[2021-04-24 22:23:59,688] liwen.local/INFO/locust.runners: All users spawned: webTestDunShan: 1 (1 total running)
[2021-04-24 22:23:59,689] liwen.local/INFO/root: Terminal was not a tty. Keyboard input disabled

Name                   # reqs      # fails  |     Avg     Min     Max  Median  |   req/s failures/s


Aggregated 0 0(0.00%) | 0 0 0 0 | 0.00 0.00

successful
Response json: {‘msg’: ‘ 未知异样,请分割管理员 ’, ‘code’: 500, ‘data’: ‘ 用户名或者明码失败 ’}
。。。。。两头省略。。。。
successful
[2021-04-24 22:24:00,454] liwen.local/INFO/locust.main: Time limit reached. Stopping Locust.
[2021-04-24 22:24:00,454] liwen.local/INFO/locust.runners: Stopping 1 users
[2021-04-24 22:24:00,455] liwen.local/INFO/locust.runners: 1 Users have been stopped, 0 still running
[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Running teardowns…
[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Shutting down (exit code 0), bye.
[2021-04-24 22:24:00,455] liwen.local/INFO/locust.main: Cleaning up runner…

Name # reqs # fails | Avg Min Max Median | req/s failures/s

GET / 166 0(0.00%) | 1 1 5 2 | 216.65 0.00
GET /7d/ 89 0(0.00%) | 1 1 12 1 | 116.16 0.00
POST /login 98 0(0.00%) | 1 1 2 1 | 127.90 0.00

POST /login/json 87 0(0.00%) | 1 1 2 2 | 113.55 0.00

Aggregated 440 0(0.00%) | 1 1 12 2 | 574.26 0.00

Response time percentiles (approximated)

Type Name 50% 66% 75% 80% 90% 95% 98% 99% 99.9% 99.99% 100% # reqs

GET / 2 2 2 2 2 3 3 5 6 6 6 166
GET /7d/ 1 1 1 1 2 2 2 12 12 12 12 89
POST /login 1 1 1 1 2 2 2 2 2 2 2 98

POST /login/json 2 2 2 2 2 2 2 3 3 3 3 87

None Aggregated 2 2 2 2 2 2 3 3 12 12 12 440

Process finished with exit code 0

总结:
locust 官网文档还是比拟具体,只有缓缓看就能把握 locust 工具怎么操作,然而在老师性能工程中,工具只有能发压就行。

正文完
 0