zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    与WinRT组件进行操作
    clr via c# 运行时序列化
    clr via c# 程序集加载和反射(2)
    clr via c# 程序集加载和反射集(一)
    clr via c# clr寄宿和AppDomain (一)
    cir from c# 托管堆和垃圾回收
    浏览器页面的生命周期
    C#常用泛型集合
    Params修饰符
    ASP.net应用程序的生命周期
  • 原文地址:https://www.cnblogs.com/grandlulu/p/9174132.html
Copyright © 2011-2022 走看看