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[@xxx='session']/@value")[0] @task(10) def test_login(self): html = self.client.get('/login').text username = 'xxx' password = 'xxx' session = self.get_session(html) datas = { 'username': username, 'password': password, 'session': session } self.client.post('/login', data=datas)

 

posted @ 2018-06-12 17:19  路小坏  阅读(537)  评论(0编辑  收藏  举报