locust性能测试4-参数关联

前言

前面【Locust性能测试2-先登录场景案例】讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点,
需要先从页面上动态获取参数,作为登录接口的请求参数,如【学信网:https://account.chsi.com.cn/passport/login】的登录接口请求参数

请求参数

需要先发个get请求,从返回的html页面中解析出需要的数据

  • lt : LT-277623-5ldGTLqQhP4foKihHUlgfKPeGGyWVI
  • execution: e1s1

备注:
lt 参数是每次打开浏览器,访问登录首页时服务端会返回一个新的数据
execution 参数是表示网站刷新次数,可以刷新下再登录,就变成 e2s1了

<input class="btn_login" name="submit" accesskey="l" value="登录" tabindex="4" type="submit" title="登录" /> <div class="account-oprate clearfix">       <a class="find-yhm" href="https://account.chsi.com.cn/account/password!rtvlgname">找回用户名</a>       <a class="find-mm" href="https://account.chsi.com.cn/account/password!retrive">找回密码</a>       <a href="https://account.chsi.com.cn/account/preregister.action?from=account-login" class="regist-btn">注册</a> </div> <input type="hidden" name="lt" value="LT-279621-fnisPBt0FVGNFrfWzJJqhTEyw6VkfH" /> <input type="hidden" name="execution" value="e2s1" /> <input type="hidden" name="_eventId" value="submit" />

locustfile3.py代码

前面用篇专门讲了requests实现接口的参数关联案例,这里直接转化成locust脚本就行了

# coding:utf-8 from locust import HttpLocust, TaskSet, task from lxml import etree class LoginDemo(TaskSet):    '''用户行为描述'''    def get_it_execution(self):        result = {}        h1 = {            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",        }        self.client.headers.update(h1)        r = self.client.get("/passport/login", verify=False)        # 从返回html页面,解析出lt、execution        dom = etree.HTML(r.content.decode("utf-8"))        try:            result["lt"] = dom.xpath('//input[@name="lt"]')[0].get("value")            result["execution"] = dom.xpath('//input[@name="execution"]')[0].get("value")            print(result)        except:            print("lt、execution参数获取失败!")        return result    def login(self, user, psw):        result = self.get_it_execution()        loginurl = "/passport/login"        h2 = {            "Referer": loginurl,            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36",            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",            "Origin": "https://account.chsi.com.cn",            "Content-Length": "119",            "Cache-Control": "max-age=0",            "Upgrade-Insecure-Requests": "1",            "Content-Type": "application/x-www-form-urlencoded"            }        body = {            "username": user,            "password": psw,            "rememberMe": "true",            "lt": result["lt"],            "execution": result["execution"],            "_eventId": "submit"        }        self.client.headers.update(h2)        print(self.client.headers)        r1 = self.client.post(loginurl, data=body, verify=False)        # print(r1.text)    @task(1)    def test_login(self):        # 测试数据        user = "13888888888"        psw = "111111"        self.login(user, psw) class websitUser(HttpLocust):    task_set = LoginDemo    host = "https://account.chsi.com.cn"    min_wait = 3000  # 单位毫秒    max_wait = 6000  # 单位毫秒 if __name__ == "__main__":    import os    os.system("locust -f locustfile3.py")

(0)

相关推荐

  • JMeter、Locust和Gatling的并发模型对比

    现在常见的并发模型有多线程模型,事件循环模型,Actor模型和CSP模型.为了能测试服务器系统的并发能力,性能测试工具也需要支持与之相应的并发发包能力.充分了解性能测试工具的并发模型,可以更好地帮助你 ...

  • 【竺】性能测试笔记13——参数化

    参数更新方式9中方式: Sequential:顺序取值 Random:随机取值 Unique:唯一取值(不重复) 什么时候访问数据表完成数据更新: Each iteration:每次迭代 Each o ...

  • 【竺】性能测试笔记12——关联

    关联的定义及使用场景    ____ 关联:将服务器提供动态变化的值存放在变量中,当需要使用该变量时,自动从服务器响应的信息中获取该值,并在后面使用的过程中进行替换.(也可能是前端页面动态生成的值) ...

  • Locust性能测试1-环境准备与基本使用

    前言 提到性能测试,大部分小伙伴想到的就是LR和jmeter这种工具,小编一直不太喜欢写这种工具类的东西,我的原则是能用代码解决的问题,尽量不去用工具. python里面也有一个性能测试框架Locus ...

  • Locust性能测试2-先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了 实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的lo ...

  • Locust性能测试3-no-web模式和csv报告保存

    前言 前面是在web页面操作,需要手动的点start启动,结束的时候也需要手工去点stop,没法自定义运行时间,这就不太方便. locust提供了命令行运行的方法,不启动web页面也能运行,这就是no ...

  • Locust性能测试5-参数化之批量注册

    前言 实现场景:所有并发虚拟用户共享同一份测试数据,并且保证虚拟用户使用的数据不重复. 例如,模拟10用户并发注册账号,总共有100个手机号,要求注册账号不重复,注册完毕后结束测试 准备数据 虚拟用户 ...

  • Locust性能测试7-分布式执行

    前言 使用Locust进行性能测试时,当一台单机不足以模拟所需的用户数量的时候,可以在多台机器上分布式的执行性能测试. locust分布式启动场景有2种,一种是单机设置master和slave模式,另 ...

  • jmeter压测学习3-提取json数据里面的token参数关联

    前言 现在很多接口的登录是返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值. 上一个接口返回的token作为下个接口的入参. 案例场景 我现在有 ...

  • Cypress web自动化33-cy.request()参数关联(上个接口返回数据传个下个接口)

    前言 接口自动化中最常见的问题就是参数关联:如何把上个接口返回数据传个下个接口当入参. cy.request() 发请求时,可以用 .as() 方法保存上个接口返回的对象,方便后面的接口调用数据. c ...

  • pytest文档73-pytest+yaml实现接口自动化框架之用例参数关联

    前言 使用 yaml 文件写测试用例的时候,如何在 yaml 文件的测试用例里面实现参数关联? 这是很多做自动化测试的小伙伴经常思考的一个问题. 接着前面的pytest+yaml 文件实现接口自动化框 ...