zoukankan      html  css  js  c++  java
  • requests自动登录禅道并提交bug 测试

    前言

    做测试工程师的少不了和一些bug管理工具打交道,比如禅道,jira,今天安静介绍下如何通过requests完成禅道的登录以及自动提bug

    抓取登录状态

    我们先通过fiddler进行抓取禅道的登录接口,查看禅道登录接口都有哪些内容。

    通过上图片可以看到禅道登录的接口地址,请求方式,请求类型。登录的账号名和密码,细心的小伙伴们可以看出来,在登录的账号名密码中,密码是通过进行加密过后的一段字符,但是密码是怎么加密的,这个没有办法知道。

    分析请求体

    我们可以先通过进行发送请求这个接口地址,看看返回的内容有没有一些提示信息

    import requests
    url = 'http://127.0.0.1/pro/user-login.html'
    r = requests.get(url)
    print(r.content.decode('utf-8'))

    通过requests进行发送请求,查看我们的返回的内容,可以看到一段关于请求内容一些加密情况

    这里很清楚的描述了,密码的加密情况,密码是通过MD5的方式进行一层加密,然后加上了一个 verifyRand 这个字符内容又进行了一层加密。分析到这里,我们可以知道只要找到 verifyRand 这个字符的内容就能通过MD5的加密方式求出加密后的密码内容。安静这里多次抓包发现 verifyRand 这个值每次请求页面的时候都会发生改变,并且在我们的返回内容中也找到了值的位置。

    既然发现在我们的请求返回值中可以找到,那么就可以通过正则表达式的形式进行提取出来。

    import requests
    import re
    url = 'http://127.0.0.1/pro/user-login.html'
    r = requests.get(url)
    verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />",r.content.decode('utf-8'))
    print(verify)

    通过上述内容,执行后可以看出,已经将 verifyRand 的值提取出来了

    MD5加密

    前面的步骤已经将登录的所需要的内容都找到了,接下来就是通过MD5进行加密了,这里安静介绍一个python的MD5加密的库 hashlib 进行完成加密。这里的密码进行了双重加密

    import requests
    import re
    import hashlib
    # 通过session的方式进行请求
    s = requests.session()
    user = 'anjing_test'
    password = 'test_anjing'
    url = 'http://127.0.0.1/pro/user-login.html'
    r = s.get(url)
    # print(r.content.decode('utf-8'))
    verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
    # 第一次加密密码
    pwd1md5 = hashlib.md5()
    pwd1md5.update(password.encode('utf-8'))
    pwd1_result = pwd1md5.hexdigest()
    # 第2次加密
    pwd2md5 = hashlib.md5()
    pwd2md5.update((pwd1_result+verify).encode('utf-8'))
    pwd2_result = pwd2md5.hexdigest()

    这里将密码进行了2层加密后,我们再次带上加密后的密码,进行请求登录接口。

    注意:因为这里后续要进行请求其他网址,安静用了session的方式进行请求。

    完成登录

    这里安静加了一个判断内容,通过请求进入测试页面,如果进入了测试页面,说明我们的登录成功了,如果没有进入,就是登录失败了

    import requests
    import re
    import hashlib
    # 通过session的方式进行请求
    s = requests.session()
    user = 'anjing_test'
    password = 'test_anjing'
    url = 'http://127.0.0.1/pro/user-login.html'
    r = s.get(url)
    # print(r.content.decode('utf-8'))
    verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
    # 第一次加密密码
    pwd1md5 = hashlib.md5()
    pwd1md5.update(password.encode('utf-8'))
    pwd1_result = pwd1md5.hexdigest()
    # 第2次加密
    pwd2md5 = hashlib.md5()
    pwd2md5.update((pwd1_result+verify).encode('utf-8'))
    pwd2_result = pwd2md5.hexdigest()
    body = {
                    "account": user,
                   "password": pwd2_result,
                   "passwordStrength": 1,
                   "referer": "/pro/",
                   "verifyRand": verify,
                   "keepLogin": 0,
                   }
    r = s.post('http://127.0.0.1/pro/user-login.html', data=body)
    # 访问测试页面
    test = s.get("http://127.0.0.1/pro/qa/")
    if "测试主页" in test.text:
        print('登录成功!!')
    else:
        print('登录失败!!')

    通过执行后发现,我们已经登录成功了。

    自动提交bug

    通过上面的步骤已经完成了对禅道的登录,接下来就是抓取提bug的接口信息。然后模拟接口自动提交bug内容。

    分析提交bug接口

    继续通过Fiddler进行抓取提交bug接口

    通过分析接口可以看出来,我们是通过表单的形式进行请求的,requests没有请求表单的内容

    表单提交

    这里我们需要引入第3方库 requests-toolbelt 进行完成,这个库需要通过pip进行安装

    pip install requests-toolbelt

    安装过后,我们将上述抓到的信息填写到请求体中,然后在携带这请求体进行请求提交bug的接口内容。

    import requests
    import re
    import hashlib
    from requests_toolbelt import MultipartEncoder
    s = requests.session()
    user = 'anjing_test'
    password = 'test_anjing'
    url = 'http://127.0.0.1/pro/user-login.html'
    r = s.get(url)
    # print(r.content.decode('utf-8'))
    verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)'  />", r.content.decode('utf-8'))[0]
    # 第一次加密密码
    pwd1md5 = hashlib.md5()
    pwd1md5.update(password.encode('utf-8'))
    pwd1_result = pwd1md5.hexdigest()
    # 第2次加密
    pwd2md5 = hashlib.md5()
    pwd2md5.update((pwd1_result+verify).encode('utf-8'))
    pwd2_result = pwd2md5.hexdigest()
    body = {
                    "account": user,
                   "password": pwd2_result,
                   "passwordStrength": 1,
                   "referer": "/pro/",
                   "verifyRand": verify,
                   "keepLogin": 0,
                   }
    r = s.post('http://127.0.0.1/pro/user-login.html', data=body)
    # 访问测试页面
    test = s.get("http://127.0.0.1/pro/qa/")
    if "测试主页" in test.text:
        print('登录成功!!')
    else:
        print('登录失败!!')
    # 提交bug接口
    url2 = 'http://127.0.0.1/pro/bug-create-1-0-moduleID=0.html'
    body2 = MultipartEncoder(
        fields=[
            ('product', "1"),
            ('module', '0'),
            ('project', ' '),
            ('openedBuild[]', 'trunk'),
            ('assignedTo', 'admin'),
            ('deadline', ''),
            ('type', 'codeerror'),
            ('os', ''),
            ('browser', ''),
            ('title', '正确的账号密码登录失败'),  # bug 名称
            ('color', ''),
            ('severity', '3'),
            ('pri', '3'),
            ('steps', '<p>[步骤]</p>\n<p>输入正确的账号名密码进行完成登录</p>\n<br />\n<p>[结果]</p>\n登录失败<br />\n<p>[期望]</p>\n登录成功<br />'),
            ('story', '0'),
            ('task','0'),
            ('oldTaskID', '0'),
            ('mailto[]', ''),
            ('contactListMenu', ''),
            ('keywords', ''),
            ('status', 'active'),
            ('labels[]', ''),
            ('files[]', ''),
            ('uid', '602f5eb06ddc9'),
            ('case', '0'),
            ('caseVersion', '0'),
            ('caseVersion', '0'),
            ('result', '0'),
            ('testtask', '0'),
                ],
        )
    # 请求提交bug接口
    r2 = s.post(url2, headers={'Content-Type': body2.content_type}, data=body2)
    if '保存成功' in r2.text:
        print('bug提交成功!')
    else:
        print('bug提交失败')

    通过执行后,再次返回到我们的bug页面,会发现已经提交成功了。

    总结

    这里登录禅道以及自动提交bug的过程,主要运用了requests的一些方法以及如何通过代码的形式进行提交表单类型。以及如何通过python进行MD5的加密。

  • 相关阅读:
    【转载】大型系统中使用JMS优化技巧
    【原创】JMS发布者订阅者【异步接收消息】
    【原创】JMS生产者和消费者【PTP异步接收消息】
    泛型
    For-Each循环
    策略模式(Strategy)
    Sort--快速排序
    Serach
    Sort--冒泡排序
    数值交换
  • 原文地址:https://www.cnblogs.com/qican/p/15775090.html
Copyright © 2011-2022 走看看