admin管理员组

文章数量:1637711

目录

一种是使用账号+密码(加密)登录的方式

一种是绕过登录的方式


目前访问登录后的一些页面,需要首先登录吧,下面2种方式实现:

  • 一种是使用账号+密码(加密)登录的方式

账号密码登录的方式在前面的文章中有写过一个locust压力测试登录例子——账号+密码(加密)。不过这个是对登录进行压力测试。这里对登录后的页面进行压力测试的话,登录接口其实只需要访问一次就可以了。

把前面的例子稍微改动下:

实现场景:先登录(只登录一次),然后访问页面->任务-我参与的任务->通讯录

from locust import HttpLocust, TaskSet, task
from locust.clients import HttpSession
import json
import hashlib   #python md5加密方法

# Web性能测试
class UserBehavior(TaskSet):
            
    def _login(self):    
        #密码加密:
        mima='91*****li'
        Jpwd = hashlib.md5()        #创建一个MD5对象
        Jpwd.update(mima.encode('utf-8')) 
        Npwd = Jpwd.hexdigest()         
        # print (Npwd)  
          
        self.head = {'Content-Type':'application/json',     #这个类型说明服务端接收json格式的字符串
                    'Connection': 'keep-alive',
                    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',            
                     }
                      
        self.form_data = {'signin_name':158******18,  #如果这里不是数字,就用加引号。例如'signin_name':'lily'
                          'password':Npwd}   #注意这里不需要给Npwd加引号
                                                                                  
        response=self.client.post("/api/account/team/signin",headers = self.head,json= self.form_data))    #这里对data进行转换,主要看Content-Type类型
        print("Response status code:", response.status_code)
        # print(response.content)     
    
    def on_start(self):
        '''任务开始准备工作:只登录一次.'''
        self._login()     

        
    # 任务1-任务-我参与的任务
    @task(1)
    def mytask(self):
        print("---访问页面-任务-我参与的任务---")
        r = self.client.get("/api/tasks/5d7851951647bf27375e3236?t=1568883989140")
        assert "首页底部公司介绍" in r.text    

    # 任务2-任务-通讯录     
    @task(3)
    def contacts(self):
        print("---访问页面-通讯录---")
        r = self.client.get("/api/departments/tree?async=false&t=1568884732067")
        print(r.text)
        assert "产品部" in r.text   
     
class User(HttpLocust):
    task_set = UserBehavior
    min_wait = 1000
    max_wait = 3000                       #任务执行间隔1-3s
    # host="https://zhlh.xxxxxx"    #执行命令:locust -f zhlh.py
    
    
# 用下面的方法,就要把上面的host注释掉   #执行命令:python zhlh.py
if __name__ == "__main__":
    import os
    os.system("locust -f zhlhuser.py --host=https://zhlh.xxxxxx")   

2、运行。指定压力用户数和用户产生的速度。设置1个虚拟用户,每秒启动1个服务,点start后运行结果。

3、运行结果。

从结果可以看到登录的请求只访问了一次,然后是“通讯录”页面的次数差不多是“我参与的任务”页请求次数的3倍(这个只是概率上讲是3倍,不完全等于3倍)
定义on_start()相当于用例的准备操作,当然还有on_stop用于数据清理操作.

注意:如果是设置多个用户,每个用户登录还是一次,其他不限制。如下例子:最终执行结果,登录接口requests 最多为5.

 

 

一种是绕过登录的方式

不想再用自己的逻辑去判断用户是否登陆。

看看Authorization这种认证方式的使用:假设服务端有一个收藏的接口,该接口的调用必须要先判断用户是否已经登录,但是我们不能在每一次接口调用的时候都携带上用户登录信息,这样太麻烦了,最好能有一种方式能够自动携带上这些东西,那就是Authorization认证。

我们的系统就是这个,有的系统可能是cookie。这里我对Authorization进行说明,网上百度很多这个问研发就好了。

登录前:

登录后随便查看一个接口:

 

        这里就不需要账号密码登录,取登录后的状态,不过需要在header中的“authorization”过期后,下次先手动登录后获取更新下。这种方式也可以测试请求登录后的其他接口是否正常。

说明:这里只需要编写需要访问的页面。其他和上面的例子原理一样。

例子:摘取片段login2.py

header = {
            'accept-encoding': "gzip",
            'authorization': "Bearer Kn5mFk9icFibM2-sjfVtykLtUA0kqKgXV_ARsKB091J3fob_tzFuqqWM6dbc-zNuga9fQQeObQPgWZKI0LDTx9uUGpv3JNhfc4RAPD5lSobu4eMlu7JLfKnwsGDto4m96wpMBYR0Dg6tAx-ANZHth7pdz1hUGml3Jw33RDFPy_Xk_b6jm92eU2AbavTcmMjLa2ga1oSWJswE8CAM4j9wIkFQLem50mi5R_JkWgl4rf7yutpo1PADGkEzI_DUr5Fl",
            'connection': "Keep-Alive",
            'user-agent': "okhttp/3.12.1",            
        }
       
class UserBehavior(TaskSet):
    # 任务1-我的会员专区
    @task(1)
    def huiyuan_my(self):
        print("---访问页面-会员专区---")
        r = self.client.get("/api/CAccount/GetUserInfo",headers=header)
        assert "李莉莉" in r.text  #断言,列表中应该有的名字           
        print("Response status code:", r.status_code)

 

相关文章:

python环境安装(一)

Locust安装、性能测试学习总结

Python进行MD5方式加密,编码、不编码

【例子】locust压力测试登录——账号+密码(加密)

本文标签: 例子接口权限方式压力测试