Locust 学习之路(关联)

Posted grandlulu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Locust 学习之路(关联)相关的知识,希望对你有一定的参考价值。

关联的概念

用户登入后,服务器通常会给用户返回一个sessionID, 用户每次登陆,服务器返回的都会不同。

那么在自动化测试中,让系统自动登入账号就会被中断。那么我们可以通过取得服务器每次返回的session来让账号登入成功。这个过程就叫做关联

 

目的

在用过Loadrunner后,我们同样可以把其中测试的概念用Locust实现。

Loadrunner中,关联是通过web_reg_save_param函数,通过类似正则表达式查找到session,并通过修改,实现每次连接都会从服务器取到相应的session。

本篇将实现Locust中达到Loadrunner关联相同效果

 

lxml 库 和 xpath 定位

通过lxml库的etree和xpath方法,我们可以定位html中的任何元素。

自动化测试selenium和分布式爬虫对于html页面的操作通常也可以用xpath来定位元素,so lxml库的应用场景可以放在很多地方,此处我们将用它取得我们得session value。

安装lxml:

pip install lxml

Quick start:

from lxml import etree


doc = ‘‘‘
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>       
     </ul>
</div>
‘‘‘
tree = etree.HTML(doc)
res = tree.xpath(路径定位)
print(res)

Quickstart中,实例化tree后通过xpath方法,定位元素路径,并获得他的值。

 

外部获取html文件可以用parse方法:

from lxml import etree
tree = etree.parse(html文件名)
res = tree.xpath(路径定位)
print(res)

 

xpath中路径表达式如下表:

表达式描述
nodename 选取此节点的所有子节点。
/ 从根节点选取。
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
. 选取当前节点。
.. 选取当前节点的父节点。
@ 选取属性。

 

 

 

 

 

 

 

样例:

取class为“item-0”:

from lxml import etree

tree = etree.parse(文件名)
res = tree.xpath(//li[@class="item-0"])

print(res)

输出结果:

[<Element li at 0x28ba323fb48>]

 

取class为“item-0”下,href为“link1.html”:

from lxml import etree

tree = etree.parse(文件名)
res = tree.xpath(//li[@class="item-0"]/a[@href="link1.html"])

print(res)

输出结果:

[<Element a at 0x1f8f7840b48>]

 

关联应用

回到关联得使用,通过lxml取得html页面的session

from lxml import etree
from locust import TaskSet, task, HttpLocust
class UserBehavior(TaskSet):
    @staticmethod
    def get_session(html):
        tree = etree.HTML(html)
        return tree.xpath("//div[@class=‘xxx‘]/input[@name=‘session‘]/@value")[0]

 

以上是关于Locust 学习之路(关联)的主要内容,如果未能解决你的问题,请参考以下文章

python locust 性能测试:locust 关联---提取返回数据并使用

locust性能测试实战

locust性能测试4-参数关联

locust参数关联及批量注册

Locust性能测试--接口加密参数关联

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段