python入门(二十一):基于文件的接口自动化框架

1、接口测试过程中,最耗费时间的是什么?

组织测试用例、如果入参数量多的话,整理入参比较耗时、对接口文档、参数耗时、分析log定位问题、需要加解密参数、返回字段的验证、很多接口返回参数作为其他接口入参(关联)

2、安装pip

进入到D:\Python36\Scripts目录下,执行easy_install pip命令安装pip

安装成功后,输入pip,显示使用命令则为安装成功。

3、安装requests包

pip install requests安装最新版本的requests包

4、请求注册的接口:e1_send.py

#encoding=utf-8

import requests

import json

import os

import hashlib # hashlib模块提供了多个不同的安全哈希算法的通用接口,可实现加密解密

print ("register------")

data = json.dumps({‘username‘: ‘wulaoshi‘, ‘password‘: ‘wulaoshi12345‘, ‘email‘: ‘[email protected]‘})                  #将字典类型的参数转换为json串

r = requests.post(‘http://39.106.41.11:8080/register/‘, data= data)

#接口文档中定义了http使用方法是post,只有使用post才能提交请求

#post方法需要两个参数,一个是发post请求的地址,即接口的提交地址

#‘http://39.106.41.11:8080/register/‘,是接口的提交地址,http://是协议,39.106.41.11是ip,

#8080是端口

#data= data,post要提交的数据放在这里面

print (r.status_code)          #打印一下http协议返回的状态码,只要请求成功,都是200

print (r.text)                 #响应体的body,text表示使用的是unicode编译法,返回的是一个 unicode 型的文本数据

print (type(r.json()))          #将返回的内容,转换为字典对象

print (str(r.json()))            #最后转换为字符串

#register------

#200

#{"username": "wulaoshi", "code": "01"}  #”code”:”01”,接口文档中说明,代表用户已存在

#<class ‘dict‘>

#{‘username‘: ‘wulaoshi‘, ‘code‘: ‘01‘}

更新一下username至”wulaoshi11”,后的运行结果是:

#register------

#200

#{"code": "00", "userid": 773}   #用户注册成功,当前用户在数据库中的id是773

#<class ‘dict‘>

#{‘code‘: ‘00‘, ‘userid‘: 773}

接口返回code说明:

‘00‘ : 成功

‘01‘:用户已存在

‘02‘:参数不合法

‘03‘:参数错误(1、用户信息错误 2、参数错误,数据库中不存在相应数据)

‘999‘:未知错误,看后台日志

postman工具,也可以执行。

5、登陆login

#encoding=utf-8

import requests

import json

import os

import hashlib

print ("register------")

data = json.dumps({‘username‘: ‘wulaoshi111‘, ‘password‘: ‘wulaoshi123456‘, ‘email‘: ‘[email protected]‘})

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(‘wulaoshi123456‘.encode("utf-8"))  #将密码进行md5加密,添加对象时需要指定编码

pwd = m5.hexdigest()  #以十六进制格式显示加密信息(常用)

print (pwd)

print ("login------")

data = json.dumps({‘username‘: ‘wulaoshi111‘, ‘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()))

#运行结果:

#register------

#200

#{"code": "00", "userid": 10}

#<class ‘dict‘>

#{‘code‘: ‘00‘, ‘userid‘: 10}

#e5c7fda86b0b918c683ff87bf4813ebc    #经过md5加密的密码

#login------

#200

#{"token": "6ed1c6292002b9dc927cfaad79783294", "code": "00", "userid": 10, "login_time": #"2019-06-11 20:03:26"}                #获取到的token值,说明注册成功

#<class ‘dict‘>

#{‘token‘: ‘6ed1c6292002b9dc927cfaad79783294‘, ‘code‘: ‘00‘, ‘userid‘: 10, ‘login_time‘: #‘2019-06-11 20:03:26‘}

#token:在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。

以上两个例子的用户名必须要一样,且用户名必须使用一次,第二次的在注册时,会提示code:01,用户名已存在

{"username": "liuyujing1", "code": "01"}

6、减少用户名更改的次数(使用变量)

ps: 上面的例子,注册与登陆使用的用户名是一致的,且都是固定的字符串,如果用户名发生变化,需要同时更改注册和登陆两处的用户名。

import requests

import json

import os

import hashlib

username = "sunshine2"                 #将用户名存到username的变量中

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘sunshine123‘, ‘email‘: ‘[email protected]‘})            #请求时,不使用固定的字符串,字典支持输入变量

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()))

import requests

import json

import os

import hashlib

m5 = hashlib.md5()

m5.update(‘sunshine123‘.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()))

运行结果:

#register------                     #依然可以成功运行,且减少了更改用户名的地方

#200

#{"code": "00", "userid": 12}

#<class ‘dict‘>

#{‘code‘: ‘00‘, ‘userid‘: 12}

#e5c7fda86b0b918c683ff87bf4813ebc

#login------

#200

#{"token": "863e15be7f53e11711b55dab0d2c4d7e", "code": "00", "userid": 12, "login_time": "2019-06-11 20:21:23"}            #token登陆也是没有问题

#<class ‘dict‘>

#{‘token‘: ‘863e15be7f53e11711b55dab0d2c4d7e‘, ‘code‘: ‘00‘, ‘userid‘: 12, ‘login_time‘: ‘2019-06-11 20:21:23‘}

7、随机生成用户名,解决程序运行第二次时,提示用户名已存在

import requests

import json

import os

import hashlib

import random

username = "sunshine" + str(random.randint(1,99999))    #随机生成用户名

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘liuyujing123‘, ‘email‘: ‘[email protected]‘})

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(‘sunshine123‘.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()))

print (username)

8、使用assert断言

import requests

import json

import os

import hashlib

import random

username = "sunshine" + str(random.randint(1,99999))

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘sunshine123‘, ‘email‘: ‘[email protected]‘})

r = requests.post(‘http://39.106.41.11:8080/register/‘, data = data)

print (r.text)

assert ‘"code": "00"‘ in r.text   #断言在r.text中存在"code": "00","code": "00"外需加’ ’

m5 = hashlib.md5()

m5.update(‘sunshine123‘.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        #断言在r.text中存在"token":,"token":外需加’ ’

9、注册唯一的用户名

import requests

import json

import os

import hashlib

import random

with open("uniquenumber.txt","r+") as fp:  #使用gbk编码的方式打开文件,省略编码方式

    uniquenumber = int(fp.read().strip())    #去掉文件中的空格

    fp.seek(0,0)                           #游标回到开始的地方

    fp.write(str(uniquenumber+1))          #将以前读到的数字加1

username = "sunshine0612" + str(uniquenumber)  #生成唯一的注册用户名

print(username)

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘sunshine123‘, ‘email‘: ‘[email protected]‘})

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(‘sunshine123‘.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

运行结果:

#lsunshine06126

#register------

#{"code": "00", "userid": 426}

#login------

#{"token": "d191a34781d6d6dc5d83f80bb6c54a7a", "code": "00", "userid": 426, #"login_time": "2019-06-12 22:09:33"}

10、断言失败的情况下,继续执行

import requests

import json

import os

import hashlib

import random

with open("uniquenumber.txt","r+") as fp:

uniquenumber = int(fp.read().strip())

fp.seek(0,0)

fp.write(str(uniquenumber+1))

username = "sunshine0612" + str(uniquenumber)

print(username)

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘sunshine123‘, ‘email‘: ‘[email protected]‘})

r = requests.post(‘http://39.106.41.11:8080/register/‘, data = data)

print (r.text)

try:

    assert ‘"code": "01"‘ in r.text            #当存在"code": "01"时,正常运行

except AssertionError as e:                 #当不存在"code": "01"时,提示断言失败

    print("断言失败")

m5 = hashlib.md5()

m5.update(‘sunshine123‘.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

#运行结果:

#sunshine06127

#register------

#{"code": "00", "userid": 427}

#断言失败

#login------

#{"token": "644820468f35f2a31daf3177dda9046f", "code": "00", "userid": 427, "login_time": #"2019-06-12 22:27:00"}

#sunshine06127

#register------

#{"username": "sunshine06127", "code": "01"}   #存在"code": "01",正常执行程序

#login------

#{"token": "644820468f35f2a31daf3177dda9046f", "code": "00", "userid": 427, "login_time": #"2019-06-12 22:34:36"}

11、生成简单测试报告

import requests

import json

import os

import hashlib

import random

testcase_count = 0

success_testcase_count = 0

fail_testcase_count = 0

with open("uniquenumber.txt","r+") as fp:

uniquenumber = int(fp.read().strip())

fp.seek(0,0)

fp.write(str(uniquenumber+1))

username = "sunshine0612" + str(uniquenumber)

print(username)

print ("register------")

data = json.dumps({‘username‘: username, ‘password‘: ‘sunshine123‘, ‘email‘: ‘[email protected]‘})

r = requests.post(‘http://39.106.41.11:8080/register/‘, data = data)

testcase_count += 1

print (r.text)

try:

assert ‘"code": "01"‘ 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(‘sunshine123‘.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)

运行结果:

#sunshine06129

#register------

#{"code": "00", "userid": 437}

#断言失败

#login------

#{"token": "f9571721f7042edd2ed4dbbf94b6ab8b", "code": "00", "userid": 437, #"login_time": "2019-06-12 22:51:48"}

#测试报告-------

#一共执行了2个测试用例

#成功执行了1个测试用例

#成功执行了1个测试用例

12、做封装

import requests

import json

import os

import hashlib

import random

testcase_count = 0

success_testcase_count = 0

fail_testcase_count = 0

def get_uniquenumber(data_file):   #做封装的公共函数可以提取出去,可以不放在测试

    with open(data_file,"r+") as fp:  #文件的主框架里面

        uniquenumber = int(fp.read().strip())

        fp.seek(0,0)

        fp.write(str(uniquenumber+1))

        return str(uniquenumber)

def md5(data):                 #做封装的公共函数可以提取出去,可以不放在测试

    m5 = hashlib.md5()         #文件的主框架里面

    m5.update(data.encode("utf-8"))

    pwd = m5.hexdigest()

    return pwd

def send_request(url,data):    #做封装的公共函数可以提取出去,可以不放在测试

    if isinstance(data,dict):    #文件的主框架里面

        data = json.dumps(data)

    r = requests.post(url,data = data)

    return(r)

def assert_result(r,key_word):

    global success_testcase_count  #设置全局变量

    global fail_testcase_count      #设置全局变量

    try:

        assert key_word in r

        success_testcase_count += 1

    except AssertionError as e:

        print("断言失败")

        fail_testcase_count += 1

    except Exception as e:

        print("未知错误")

        fail_testcase_count += 1

username = "sunshine0612" + get_uniquenumber("e:\\uniquenumber.txt")

print(username)

print ("register------")

url = ‘http://39.106.41.11:8080/register/‘

data = {‘username‘: username, ‘password‘: "sunshine123", ‘email‘: ‘[email protected]‘}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"code": 01‘))

print ("login------")

url = ‘http://39.106.41.11:8080/login/‘

data ={‘username‘: username, ‘password‘: md5("sunshine123")}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"token"‘))

print("测试报告-------")

print("一共执行了%s个测试用例"%testcase_count)

print("成功执行了%s个测试用例"%success_testcase_count)

print("成功执行了%s个测试用例"%fail_testcase_count)

#运行结果:

#sunshine061224

#register------

#{"code": "00", "userid": 2448}

#断言失败

#None

#login------

#{"token": "13db11b40f19345ffe652507d6f36f4d", "code": "00", "userid": 2448, #"login_time": "2019-06-16 14:35:32"}

#None

#测试报告-------

#一共执行了2个测试用例

#成功执行了1个测试用例

#成功执行了1个测试用例

13、ip和端口可用变量来维护

import requests

import json

import os

import hashlib

import random

testcase_count = 0

success_testcase_count = 0

fail_testcase_count = 0

ip = "39.106.41.11"                  #ip和端口提取为变量

port = "8080"

def get_uniquenumber(data_file):

with open(data_file,"r+") as fp:

uniquenumber = int(fp.read().strip())

fp.seek(0,0)

fp.write(str(uniquenumber+1))

return str(uniquenumber)

def md5(data):

m5 = hashlib.md5()

m5.update(data.encode("utf-8"))

pwd = m5.hexdigest()

return pwd

def send_request(url,data):

if isinstance(data,dict):

data = json.dumps(data)

r = requests.post(url,data = data)

return(r)

def assert_result(r,key_word):

global success_testcase_count

global fail_testcase_count

try:

assert key_word in r

success_testcase_count += 1

except AssertionError as e:

print("断言失败")

fail_testcase_count += 1

except Exception as e:

print("未知错误")

fail_testcase_count += 1

username = "sunshine0612" + get_uniquenumber("e:\\uniquenumber.txt")

print(username)

print ("register------")

url = ‘http://%s:%s/register/‘%(ip,port)    #模板字符串

data = {‘username‘: username, ‘password‘: "sunshine123", ‘email‘: ‘[email protected]‘}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"code": 01‘))

print ("login------")

url = ‘http://%s:%s/login/‘%(ip,port)     #模板字符串

data ={‘username‘: username, ‘password‘: md5("sunshine123")}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"token"‘))

print("测试报告-------")

print("一共执行了%s个测试用例"%testcase_count)

print("成功执行了%s个测试用例"%success_testcase_count)

print("成功执行了%s个测试用例"%fail_testcase_count)

14、配置和程序的分离

server_info.py:

ip = "39.106.41.11"

port = "8080"

e1_send.py:

import requests

import json

import os

import hashlib

import random

from server_info import ip,port    #引入ip和端口变量,使主程序不用更改配置

testcase_count = 0

success_testcase_count = 0

fail_testcase_count = 0

def get_uniquenumber(data_file):

with open(data_file,"r+") as fp:

uniquenumber = int(fp.read().strip())

fp.seek(0,0)

fp.write(str(uniquenumber+1))

return str(uniquenumber)

def md5(data):

m5 = hashlib.md5()

m5.update(data.encode("utf-8"))

pwd = m5.hexdigest()

return pwd

def send_request(url,data):

if isinstance(data,dict):

data = json.dumps(data)

r = requests.post(url,data = data)

return(r)

def assert_result(r,key_word):

global success_testcase_count

global fail_testcase_count

try:

assert key_word in r

success_testcase_count += 1

except AssertionError as e:

print("断言失败")

fail_testcase_count += 1

except Exception as e:

print("未知错误")

fail_testcase_count += 1

username = "sunshine0612" + get_uniquenumber("e:\\uniquenumber.txt")

print(username)

print ("register------")

url = ‘http://%s:%s/register/‘%(ip,port)

data = {‘username‘: username, ‘password‘: "sunshine123", ‘email‘: ‘[email protected]‘}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"code": 01‘))

print ("login------")

url = ‘http://%s:%s/login/‘%(ip,port)

data ={‘username‘: username, ‘password‘: md5("sunshine123")}

r = send_request(url,data)

testcase_count += 1

print(r.text)

print(assert_result(r.text,‘"token"‘))

print("测试报告-------")

print("一共执行了%s个测试用例"%testcase_count)

print("成功执行了%s个测试用例"%success_testcase_count)

print("成功执行了%s个测试用例"%fail_testcase_count

15、测试数据与程序的分离

1) test_data.txt

register||{‘username‘: username, ‘password‘: "sunshine123", ‘email‘: ‘[email protected]‘}

login||{‘username‘: username, ‘password‘: md5("sunshine123")}

#该文件中的username,在test_data文件中并不是字符串,需要变成变量

#处理方法:${username}

register||{‘username‘: ${username}, ‘password‘: "sunshine123", ‘email‘: ‘[email protected]‘}

login||{‘username‘: ${username}, ‘password‘: md5("sunshine123")}

with open("test_data.txt") as fp:     #test_data.txt与e1_send.py,在同一目录下,所以不

test_cases = fp.readlines()    #用绝对路径,且是gbk编码,所以不用写编码方式

print(test_cases)

运行结果:

[‘register||{\‘username\‘: ${username}, \‘password\‘: "sunshine123", \‘email\‘: \‘[email protected]\‘}\n‘, ‘login||{\‘username\‘: ${username}, \‘password\‘: md5("sunshine123")}‘]               #运行结果中有换行符

with open("test_data.txt") as fp:

test_cases = fp.readlines()

test_cases = list(map(lambda x:x.strip(),test_cases))

print(test_cases)

#运行结果:

[‘register||{\‘username\‘: ${username}, \‘password\‘: "sunshine123", \‘email\‘: \‘[email protected]\‘}‘, ‘login||{\‘username\‘: ${username}, \‘password\‘: md5("sunshine123")}‘]               #去掉回车

#但是上面的结果中有\

#解决方法:

#将test_data.txt文件中的变量都以”${}”的形式写

#更改后的test_data.txt文件

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

login||{"username": "${username}", "password": "${md5(sunshine123)}"

运行下面代码:

with open("test_data.txt") as fp:

test_cases = fp.readlines()

test_cases = list(map(lambda x:x.strip(),test_cases))

print(test_cases)

结果:

[‘register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}‘, ‘login||{"username": "${username}", "password": "${md5(sunshine123)}"‘]              #结果正确

尝试引入register具体的url

with open("test_data.txt") as fp:

test_cases = fp.readlines()

test_cases = list(map(lambda x:x.strip(),test_cases))

print(test_cases[0])

url,data = test_cases[0].split("||")

print(url)

运行结果:

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

register               #只是打印了register,但是并没有打印具体的url

test_data.txt:

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

login||{"username": "${username}", "password": "${md5(sunshine123)}"

server_info.py

ip = "39.106.41.11"

port = "8080"

register= ‘http://%s:%s/register/‘%(ip,port)

login = ‘http://%s:%s/login/‘%(ip,port)

e1_send.py:

import requests

import json

import os

import hashlib

import random

from server_info import *

with open("test_data.txt") as fp:

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("||")

print(api_name)

exec("url="+api_name )          #接口名字和请求地址的映射

print(url)

运行结果:

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}           #但是运行结果中的username并没有成功引入

register

http://39.106.41.11:8080/register/    #引入register具体的url成功

引入username变量,进行请求,用到正则。

server_info.py:

ip = "39.106.41.11"

port = "8080"

register = ‘http://%s:%s/register/‘%(ip,port)

login = ‘http://%s:%s/login/‘%(ip,port)

test_data.txt

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

login||{"username": "${username}", "password": "${md5(sunshine123)}"

e1_send.py:

import requests

import json

import os

import hashlib

import random

from server_info import *

import re

with open("test_data.txt") as fp:

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("||")

print(api_name)

exec("url="+api_name )

print(url)

testcase_count = 0

success_testcase_count = 0

fail_testcase_count = 0

def get_uniquenumber(data_file):

with open(data_file,"r+") as fp:

uniquenumber = int(fp.read().strip())

fp.seek(0,0)

fp.write(str(uniquenumber+1))

return str(uniquenumber)

def md5(data):

m5 = hashlib.md5()

m5.update(data.encode("utf-8"))

pwd = m5.hexdigest()

return pwd

def send_request(url,data):

if isinstance(data,dict):

data = json.dumps(data)

r = requests.post(url,data = data)

return(r)

def assert_result(r,key_word):

global success_testcase_count

global fail_testcase_count

try:

assert key_word in r

success_testcase_count += 1

except AssertionError as e:

print("断言失败")

fail_testcase_count += 1

except Exception as e:

print("未知错误")

fail_testcase_count += 1

username = "sunshine0612" + get_uniquenumber("e:\\uniquenumber.txt")

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)

运行结果:

register||{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

register

http://39.106.41.11:8080/register/

{"username": "${username}", "password": "sunshine123", "email": "[email protected]"}

{"username": "liuyujing061232", "password": "sunshine123", "email": "[email protected]"}

{"code": "00", "userid": 2456}

16、eval和exec的区别

>>> exec("a=1")   #exec()执行程序

>>> a

1

>>> eval("a")      #eval(str),从一个表达式获取一个返回值

1

17、接口测试框架思想:

配置和程序分离

公共函数和主程序分离

测试数据和程序的分离

有测试报告

有日志

原文地址:https://www.cnblogs.com/suitcases/p/11152625.html

时间: 2024-10-09 09:31:37

python入门(二十一):基于文件的接口自动化框架的相关文章

Python入门(二)——IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化

Python入门(二)--IDE选择PyCharm,输入和输出,基础规范,数据类型和变量,常量,字符串和编码,格式化 我们从今天就开始正式的学习PY交易了,PY交易还行,我们有基础之后学习起来倒不是说那么的被动,我学习的是Python2.7,虽然现在随着版本的迁移至Python3,但是这个并不会对我们造成什么困扰,毕竟只是一个适应阶段 我们的学习资料:廖雪峰官方网站Python2.7教程 一.IDE选择PyCharm 我们虽然在前面一章已经配置过,但是我们还是有很多的IDE可以开发Py,比如su

python3+request接口自动化框架

首次书写博客,记录下写的自动化接口框架,框架比较简单,哈哈哈,算是记录下历程把!~~~ 一.本次框架由python3.6 书写 1.准备代码环境,下载python3.6    下载地址:https://www.python.org/downloads 2.下载pycharm 软件. 二.开始创建python接口自动化框架: 1.这是我创建的框架中的各个文件夹,分别有config  配置文件夹.fengzhuang   将接口用get post  两种传输方式进行封装并自动来区分执行. 2.log

接口自动化框架好文

接口自动化框架好文 2017-04-13 API 自动化测试框架分享 接口测试的一些感悟 HTTP API自动化测试从手工到平台的演变

python接口自动化框架

基于 python 的接口测试框架 接口测试 · jphtmt · 于 5 月前发布 · 最后由 jphtmt 于 4 月前回复 · 3553 次阅读 项目背景 公司内部的软件采用B/S架构,管理实验室数据,实现数据的存储和分析统计.大部分是数据的增删改查,由于还在开发阶段,所以UI界面的变化非常快,之前尝试过用python+selenium进行UI自动化测试,后来发现今天刚写好的脚本第二天前端就改了页面,又得重新去定位元素什么的,消耗大量的精力与时间维护自动化脚本.针对此种情况,对接口测试较为

python写接口自动化框架

代码如下: 1 #!/usr/bin/env python 2 # -*- coding: utf_8 -*- 3 # 获取测试用例文件excel 4 5 import xlrd 6 import json 7 8 9 class CreateExcel: 10 def __init__(self): 11 pass 12 13 @classmethod 14 def open_excel(cls): 15 path = "testcase.xls" 16 workbook = xlr

基于Selenium的web自动化框架

1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览

Python(二十一)

一 多态与多态性 很多人喜欢将二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗     1.1 多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. 2. 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(

Python入门二:函数

一.函数的定义和使用 1.基本结构: 1 def 函数名(参数): 2 """ 3 文档字符串 4 """ 5 函数体 6 返回值 7 2.函数名: 和变量名命名规则一致,最好不要与内置函数名相同 3.参数: 和C/C++不同,参数无需指定类型,直接交由解释器去判断: 对于number, str, tuple等不可变的对象,相当于传值,即是传递了拷贝 对于list,dict,set等可变对象,相当于引用传递,内部更改会影响外部的值 a.普通参数:

Python入门(十三) 文件操作

1.打开/关闭文件 首先来看一下Python中的open函数: open(file, mode='r', buffering=-1, encoding=None) 1)file: 文件名 2)mode: 这个跟标准c库中fopen中的mode参数取值类似: 'r': 以只读方式打开文件,如果文件不存在,则会抛出IOError 'w': 以只写方式打开文件,如果文件不存在,则会自动创建文件:如果文件已经存在,则会清空文件已有的内容 'a': 以追加的方式打开,一般会与'w'联合使用: 'b': 二