zoukankan      html  css  js  c++  java
  • 1、接口自动化的分步演变

    一、发送请求 注册
    e1_send.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    
    print ("register------")
    data = json.dumps({'username': 'wulaoshis1121',
    'password': 'wulaoshi123452','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    register------
    200
    {"code": "00", "userid": 2660}
    <class 'dict'>
    {'code': '00', 'userid': 2660}
     
     
     
     
    二、登录
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    
    print ("register------")
    data = json.dumps({'username': 'testmanwu12', 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    print (pwd)
    
    print ("login------")
    data = json.dumps({'username': 'testmanwu12', 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    register------
    200
    {"code": "00", "userid": 2661}
    <class 'dict'>
    {'code': '00', 'userid': 2661}
    a9a5f12ba3bf64941546e7974f21c4e3
    login------
    200
    {"token": "c07b859d4f3e9bd73bf984660b8efa3d", "code": "00", "userid": 2661, "login_time": "2019-05-30 20:36:12"}
    <class 'dict'>
    {'token': 'c07b859d4f3e9bd73bf984660b8efa3d', 'code': '00', 'userid': 2661, 'login_time': '2019-05-30 20:36:12'}
     
     
     
    三 使用变量 :由于注册和登录接口会多次使用username,把username提取出来放到变量里,这样每次都只需要修改一个地方即可。
    e2_use_var.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    
    username = "testmanwu112"
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    print (pwd)
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    register------
    200
    {"code": "00", "userid": 2662}
    <class 'dict'>
    {'code': '00', 'userid': 2662}
    a9a5f12ba3bf64941546e7974f21c4e3
    login------
    200
    {"token": "b996dbae1785cdc70d3b87a1721c2c08", "code": "00", "userid": 2662, "login_time": "2019-05-30 20:42:13"}
    <class 'dict'>
    {'token': 'b996dbae1785cdc70d3b87a1721c2c08', 'code': '00', 'userid': 2662, 'login_time': '2019-05-30 20:42:13'}
     
     
     
    四 由于注册用户名不能重复,每次执行接口用例都要手动改数据很麻烦
         用random生成随机数解决(也有可能会生成重复的数)
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    username = "testmanwu"+str(random.randint(1,99999999))
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    print (pwd)
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.status_code)
    print (r.text)
    print (type(r.json()))
    print (str(r.json()))
     
     
     
     
     
    五 另一种方式创建唯一用户名
      #写一个uniquenumber.txt文件,存任意数字,每次读取,后+1保证每次取到的用户名绝对不会重复
    C:\Users\dell\Desktop\练习\5\uniquenumber.txt
    1
     
     
    e4_uniquenumber.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    with open("C:\Users\dell\Desktop\练习\5\uniquenumber.txt","r+") as fp:
        uniquenumber = int(fp.read().strip())  #去掉前后的空格
        fp.seek(0,0)  #游标回到最开始的位置
        fp.write(str(uniquenumber+1))  #每次+1写入
    
    username = "testmanxx"+str(uniquenumber)
    print(username)
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.text)
    
    assert '"code": "00"' in r.text
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.text)
    
    assert '"token"' in r.text
    
    
     
     
    六 断言
    e3_assert.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    username = "testmanwu"+str(random.randint(1,99999999))
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.text)
    
    assert '"code": "01"' in r.text
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.text)
    assert '"token"' in r.text
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    register------
    {"code": "00", "userid": 2666}
    Traceback (most recent call last):
      File "C:UsersdellDesktop练习5530.py", line 15, in <module>
        assert '"code": "01"' in r.text
    AssertionError
     
     
     
     
    七 如果断言失败时,想要不影响后面的用例执行,用try...except...
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    with open("C:\Users\dell\Desktop\练习\5\uniquenumber.txt","r+") as fp:
        uniquenumber = int(fp.read().strip())
        fp.seek(0,0)
        fp.write(str(uniquenumber+1))
    
    username = "testmanxx"+str(uniquenumber)
    print(username)
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    print (r.text)
    
    try:
        assert '"code": "xx"' in r.text
    except AssertionError as e:
        print("断言失败")
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    print (r.text)
    
    assert '"token"' in r.text
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    testmanxx8
    register------
    {"code": "00", "userid": 2672}
    断言失败
    login------
    {"token": "1903299c6d10fe01b7e3ee5a2ea420d1", "code": "00", "userid": 2672, "login_time": "2019-05-30 21:12:08"}
     
     
     
     
    八 统计用例执行数据,生成测试报告
    e5_report.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    testcase_count =0
    success_testcase_count = 0
    fail__testcase_count = 0
    
    with open("C:\Users\dell\Desktop\练习\5\uniquenumber.txt","r+") as fp:
        uniquenumber = int(fp.read().strip())
        fp.seek(0,0)
        fp.write(str(uniquenumber+1))
    
    username = "testmanxx"+str(uniquenumber)
    print(username)
    
    print ("register------")
    data = json.dumps({'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}) #
    r = requests.post('http://39.106.41.11:8080/register/', data= data)
    testcase_count+=1
    print (r.text)
    
    try:
        assert '"code": "xx"' in r.text
        success_testcase_count+=1
    except AssertionError as e:
        print("断言失败")
        fail__testcase_count +=1
    except Exception as e:
        print("未知异常")
        fail__testcase_count +=1
    
    
    
    m5 = hashlib.md5()
    m5.update('wulaoshi1234521'.encode("utf-8"))
    pwd = m5.hexdigest()
    
    print ("login------")
    data = json.dumps({'username': username, 'password': pwd}) #
    r = requests.post('http://39.106.41.11:8080/login/', data = data)
    testcase_count+=1
    print (r.text)
    
    try:
        assert 'token' in r.text
        success_testcase_count+=1
    except AssertionError as e:
        print("断言失败")
        fail__testcase_count +=1
    except Exception as e:
        print("未知异常")
        fail__testcase_count +=1
    
    
    print("测试报告:")
    print("一共执行了%s个用例" %testcase_count)
    print("成功了%s个用例" %success_testcase_count)
    print("失败了%s个用例" %fail__testcase_count)
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    testmanxx10
    register------
    {"code": "00", "userid": 2674}
    断言失败
    login------
    {"token": "f96d3e43287c80cd35ef01c057e5e67a", "code": "00", "userid": 2674, "login_time": "2019-05-30 21:27:16"}
    测试报告:
    一共执行了2个用例
    成功了1个用例
    失败了1个用例
     
     
     
    九  封装:
    e6_encapsu.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    
    #获取唯一number
    def get_unique_number(data_file):
        with open(data_file,"r+") as fp:
            uniquenumber = int(fp.read().strip())
            fp.seek(0,0)
            fp.write(str(uniquenumber+1))
            return uniquenumber
    
    #密码加密
    def md5(data):
        m5 = hashlib.md5()
        m5.update('wulaoshi1234521'.encode("utf-8"))
        md5_data = m5.hexdigest()
        return md5_data
    
    #发送请求
    def send_request(url,data):
        if isinstance(data,dict):
            data = json.dumps(data)
        response = requests.post(url, data= data)
        return response
    
    #断言    
    def assert_result(response,key_word):
        global success_testcase_count
        global fail__testcase_count
        try:
            assert key_word in r.text
            success_testcase_count+=1
        except AssertionError as e:
            print("断言失败")
            fail__testcase_count +=1
        except Exception as e:
            print("未知异常")
            fail__testcase_count +=1
    
    
    testcase_count =0
    success_testcase_count = 0
    fail__testcase_count = 0
    
    username = "testmanwenx"+str(get_unique_number("C:\Users\dell\Desktop\练习\5\uniquenumber.txt"))
    print(username)
    
    print ("register------")
    url = 'http://39.106.41.11:8080/register/'
    data = {'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}
    r = send_request(url,data)
    testcase_count+=1
    print (r.text)
    assert_result(r,"userid")
    
    print ("login------")
    url = 'http://39.106.41.11:8080/login/'
    data = {'username': username, 'password': md5("wulaoshi1234521")}
    r = send_request(url,data)
    testcase_count+=1
    print (r.text)
    
    assert_result(r,"token")
    
    print("测试报告:")
    print("一共执行了%s个用例" %testcase_count)
    print("成功了%s个用例" %success_testcase_count)
    print("失败了%s个用例" %fail__testcase_count)
    十 如果接口地址变了,修改很麻烦,可以把地址分离到另一个文件,做到配置和程序的分离
    创建一个C:UsersdellDesktop练习5server_info.py文件
    ip = "39.106.41.11"
    port = "8080"
     
    register = 'http://%s:%s/register/' %(ip,port)
    login = 'http://%s:%s/login/' %(ip,port)
     
    e6_encapsu.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    from server_info import ip,port
    
    def get_unique_number(data_file):
        with open(data_file,"r+") as fp:
            uniquenumber = int(fp.read().strip())
            fp.seek(0,0)
            fp.write(str(uniquenumber+1))
            return uniquenumber
    
    def md5(data):
        m5 = hashlib.md5()
        m5.update('wulaoshi1234521'.encode("utf-8"))
        md5_data = m5.hexdigest()
        return md5_data
    
    def send_request(url,data):
        if isinstance(data,dict):
            data = json.dumps(data) #
        response = requests.post(url, data= data)
        return response
        
    def assert_result(response,key_word):
        global success_testcase_count
        global fail__testcase_count
        try:
            assert key_word in r.text
            success_testcase_count+=1
        except AssertionError as e:
            print("断言失败")
            fail__testcase_count +=1
        except Exception as e:
            print("未知异常")
            fail__testcase_count +=1
    
    
    testcase_count =0
    success_testcase_count = 0
    fail__testcase_count = 0
    
    username = "testmanwenx"+str(get_unique_number("C:\Users\dell\Desktop\练习\5\uniquenumber.txt"))
    print(username)
    
    print ("register------")
    url = 'http://%s:%s/register/' %(ip,port)
    data = {'username': username, 'password': 'wulaoshi1234521','email': 'wulaoshi@qq.com'}
    r = send_request(url,data)
    testcase_count+=1
    print (r.text)
    assert_result(r,"userid")
    
    print ("login------")
    url = 'http://%s:%s/login/' %(ip,port)
    data = {'username': username, 'password': md5("wulaoshi1234521")}
    r = send_request(url,data)
    testcase_count+=1
    print (r.text)
    
    assert_result(r,"token")
    
    print("测试报告:")
    print("一共执行了%s个用例" %testcase_count)
    print("成功了%s个用例" %success_testcase_count)
    print("失败了%s个用例" %fail__testcase_count)
    C:Usersdell>py -3 C:UsersdellDesktop练习5530.py
    testmanwenx20
    register------
    {"code": "00", "userid": 2679}
    login------
    {"token": "c3e3a8ba671fc2b4b8395ff16f1af448", "code": "00", "userid": 2679, "login_time": "2019-05-30 22:03:12"}
    测试报告:
    一共执行了2个用例
    成功了2个用例
    失败了0个用例
     
     
    十一  测试数据分离 ,同时引用变量
    创建一个C:UsersdellDesktop练习5 est_data.txt文件  
    注意:本次文件存的是ANSI模式,后面读取的时候也是用gbk模式,保持一致
    register||{"username": "${username}", "password": "wulaoshi1234521","email": "wulaoshi@qq.com"}
    login||{"username": "${username}", "password": "${md5('wulaoshi1234521'})"}
     
    e8_data_driven.py
    #encoding=utf-8
    import requests
    import json
    import os
    import hashlib
    import random
    from server_info import *
    import re
    
    def get_unique_number(data_file):
        with open(data_file,"r+") as fp:
            uniquenumber = int(fp.read().strip())
            fp.seek(0,0)
            fp.write(str(uniquenumber+1))
            return uniquenumber
    
    def md5(data):
        m5 = hashlib.md5()
        m5.update('wulaoshi1234521'.encode("utf-8"))
        md5_data = m5.hexdigest()
        return md5_data
    
    def send_request(url,data):
        if isinstance(data,dict):
            data = json.dumps(data) #
        response = requests.post(url, data= data)
        return response
        
    def assert_result(response,key_word):
        global success_testcase_count
        global fail__testcase_count
        try:
            assert key_word in r.text
            success_testcase_count+=1
        except AssertionError as e:
            print("断言失败")
            fail__testcase_count +=1
        except Exception as e:
            print("未知异常")
            fail__testcase_count +=1
    
    
    username = "testmanwenx"+str(get_unique_number(r"C:UsersdellDesktop练习5uniquenumber.txt"))
    
    with open(r"C:UsersdellDesktop练习5	est_data.txt") as fp: #不指定encoding默认使用gbk读取
        test_cases = fp.readlines()
    test_cases = list(map(lambda x:x.strip(),test_cases))
    print(test_cases[0])
    api_name,data = test_cases[0].split("||")
        
    exec("url="+api_name)
    print(url)
    print(data)
    
    
    if re.search(r"${w+}",data):
        var_name = re.search(r"${(w+)}",data).group(1)
        data  = re.sub(r"${(w+)}",eval(var_name),data)
    print(data)
    
    
    r = send_request(url,data)
    print(r.text)
    C:Usersdell>py -3 C:UsersdellDesktop练习5e8_data_driven.py
    register||{"username": "${username}", "password": "wulaoshi1234521","email": "wulaoshi@qq.com"}
    {"username": "${username}", "password": "wulaoshi1234521","email": "wulaoshi@qq.com"}
    {"username": "testmanx32", "password": "wulaoshi1234521","email": "wulaoshi@qq.com"}
     
  • 相关阅读:
    getter 和 setter方法
    了解coredata 数据库的博客
    iOS 本地缓存简述
    iOS 9.0 xcode7
    iOS 直播推流SDK -- PLCameraStreamingKit
    时间充裕的时候看看技术总结
    技术分享7
    学习笔记-音频编解码
    学习笔记-weak strong ARC mrc
    飘雪效果的swf
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11950418.html
Copyright © 2011-2022 走看看