python测验7_python接口自动化测试七:文件上传

20180606231839184481.png

20180606231839428631.png

# 文件上传:content-Type: multipart/form-data类型

importunittest

importrequests

classSendFile():def__init__(self, s):self.s =s

defsendImg(self, jpgpath, jpgname=‘1.jpg‘, jpgtype=‘image/jpeg‘):# 登录并更新cookies

f =open(‘1.jpg‘, ‘rb‘)# 绝对路径

url2 =‘‘body ={‘localurl‘:(None, jpgname),

‘imgFile‘:(‘1.jpg‘, open(jpgpath, ‘rb‘), jpgtype)# 1、绝对路径 2、open(‘1.jpg‘, ‘rb‘) 3、content-type的值

}# 上传图片的时候,不data和json,用files

r =self.s.post(url2, files=body)# 1、调用全局的s,用self.s 2、files

print(r.text)# 上传到服务器,每传一次地址都不一样

# 解决抛异常

try:jpg_url =r,json()[‘url‘]# (相对路径)

print(jpg_url)returnjpg_url

exceptException asmsg:# 返回报错信息

print(‘图片上传失败,原因:%s‘%msg)# 打印报错信息

# raise # 主动抛原始异常

# raise ··· # 抛出异常内容为:“···”

return‘‘if__name__==‘__main__‘:s =requests.session()fromtest.test_009_003_zentaologin importLoginZentao

# 调登录方法

login =LoginZentao(s)# 实例化类LoginZentao为对象

login.login()# 上传文件

send =SendFile(s)# 把类sendfile()实例化为对象

send.sendImg()# 调用sendfile()里面的sendImg方法

importrequests

classLoginZentao():def__init__(self, s):# 初始化

self.s =s # 定义一个全局的s

deflogin(self):r =self.s.post()# self.s调用全局的s

pass

if__name__==‘__main__‘:s =requests.session()zentao =LoginZentao(s)# 类实例化为对象,传入参数s

zentao.login()# 调用zentao里面的login() 方法

20180606231839504806.png

importunittest

importrequests

fromtest.test_009_003_zentaologin importLoginZentao # 从文件夹.文件名导入LoginZentao类

fromtest.test_009_002_sendfile importSendFile # 从文件夹.文件名导入sendfile类

importos

# 获取文件路径

parpath =os.path.dirname(os.path.dirname(os.path.realpath(__file__)))# 定位当前文件夹

jpgpath =os.path.join(parpath, ‘testdata‘, ‘1.jpg‘)# “testdata”:存放文件的文件夹名,“1.jpg”:文件名

classTestSendFile(unittest.TestCase):@classmethod

defsetUpClass(cls):cls.s =requests.session()# 实例化调用的类

cls.login =LoginZentao(cls.s )# 实例化类LoginZentao为对象

cls.send =SendFile(cls.s)# 把类sendfile()实例化为对象

deftest_01(self):# 上传文件:第一步,登录

self.login.login()# 第二步,传文件

result =self.send.sendImg(jpgpath)# 第三步:断言:返回的结果里面包含‘.jpg‘

self.assertIn(‘.jpg‘, result)# # 调登录方法

# login = LoginZentao(s) # 实例化类LoginZentao为对象

# login.login()

# # 上传文件

# send = SendFile(s) # 把类sendfile()实例化为对象

# send.sendImg() # 调用sendfile()里面的sendImg方法

20180606231839564379.png

# 添加多个附件参数化

files = [("1.png", "1.png")

("2.png", "2.png")]defaddFiles(files, n=1):file = []fori inlist(range(n)):a =("files[]", (files[i][1], open(files[i][2], "rb"), "image/png"))b =("labels[]", (None, ‘附件标题1‘)),

("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),

("labels[]", "tu2"),

file.append(a)file.append(b)returnfile

20180606231839627858.png

# 上传图片代码

# coding:utf-8

import requests

base = ‘http://127.0.0.1:81/‘ # 禅道的服务器地址

loginUrl = base+"/zentao/user-login.html"

h = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Referer": "http://127.0.0.1/zentao/user-login.html",

# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的

"Connection": "keep-alive",

"Content-Type": "application/x-www-form-urlencoded",

}

body = {

"account":"admin",

"password":"e10adc3949ba59abbe56e057f20f883e",

"keepLogin[]":"on",

"referer":"http://127.0.0.1/zentao/my/"

}

s = requests.session() # 保持会话

r = s.post(loginUrl, data=body, headers=h)

print(r.content) # 打印结果看到location=‘http://127.0.0.1/zentao/my/‘说明登录成功了

# 上传图片

url1 = "http://127.0.0.1:81/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

f ={

"localUrl": (None, "1.png"),

"imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")

}

r = s.post(url1, files=f)

try:

jpgurl = base+r.json()["url"]

print(u"上传图片后的url地址:%s" % jpgurl)

except Exception as msg:

print(u"返回值不是json格式:%s" % str(msg))

print(r.content.decode("utf-8"))

20180606231839708916.png

# 参数

f = {

"product": "1",

"module": "0",

"project": "",

"openedBuild[]": "trunk",

"assignedTo": "admin",

"type": "codeerror",

"os": "all",

"browser": "all",

"color": "",

"title": "yoyoketang-这是一个bug描述1122",

"severity": "3",

"pri": "0",

"steps": ‘

[步骤]

\

1、第一步点

\

2、第二步点

\

3、点三步点

\

[结果]

\

072254170557cdn.png

\

[期望]

‘,

# img src=“data/upload/1/201712/072254170557cdn.png” 这个地址是上一步图片上传的相对地址

"story": "0",

"task": "0",

"mailto[]": "",

"keywords": "",

"files[]": "",

"labels[]": "",

"uid": "5a2955c884f98",

"case": "0",

"caseVersion": "0",

"result": "0",

"testtask": "0"

}

20180606231839787044.png

# coding:utf-8

import requests

base = ‘http://127.0.0.1/‘ # 禅道的服务器地址

loginUrl = base+"zentao/user-login.html"

h = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的

"Content-Type": "application/x-www-form-urlencoded",

}

body = {

"account": "admin",

"password": "e10adc3949ba59abbe56e057f20f883e",

"keepLogin[]": "on",

"referer": "http://127.0.0.1/zentao/my/"

}

s = requests.session() # 保持会话

r = s.post(loginUrl, data=body, headers=h)

print(r.content) # 打印结果看到location=‘http://127.0.0.1/zentao/my/‘说明登录成功了

# 提交bug

url1 = base+"zentao/bug-create-1-0-moduleID=0.html"

f = {

# 参数

}

r = s.post(url1, data=f)

print(r.content.decode("utf-8"))

20180606231839855406.png

# .参数关联

# coding:utf-8

import requests

host = ‘http://127.0.0.1/‘ # 禅道的服务器地址

s = requests.session() # 保持会话

def login(username=‘admin‘, psw=‘e10adc3949ba59abbe56e057f20f883e‘):

‘‘‘登录禅道

username: 用户名

psw:登录密码,加密后的

‘‘‘

loginUrl = host+"zentao/user-login.html"

h = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的

"Content-Type": "application/x-www-form-urlencoded",

}

body = {

"account": username,

"password": psw,

"keepLogin[]": "on",

"referer": host+"zentao/my/"

}

r = s.post(loginUrl, data=body, headers=h)

print(r.content) # 打印结果看到location=‘http://127.0.0.1/zentao/my/‘说明登录成功了

20180606231839934510.png

def upload_jpg(path="d:\\1.png", filename=‘1.png‘):

‘‘‘上传图片

path:上传文件路径

filename: 上传文件名称

‘‘‘

url1 = host+"zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

f ={

"localUrl": (None, filename),

"imgFile": (filename, open(path, "rb"), "image/png")

}

r = s.post(url1, files=f)

try:

jpgurl = r.json()["url"]

print(u"上传图片后的url地址:%s" % jpgurl)

return jpgurl

except Exception as msg:

print(u"返回值不是json格式:%s" % str(msg))

print(r.content)

return ‘‘

20180606231839977481.png

def add_bug(title="yoyoketang-这是一个bug描述1224", jpg=‘‘):

‘‘‘提交bug

title: bug描述

jpg:上传图片的相对路径

‘‘‘

url1 = host+"zentao/bug-create-1-0-moduleID=0.html"

f = {

# 参数

}

r = s.post(url1, data=f)

print(r.content.decode("utf-8"))

if __name__ == "__main__":

# 1.先登录

login(username=‘admin‘, psw=‘e10adc3949ba59abbe56e057f20f883e‘)

# 2.图片上传,返回图片地址

jpg = upload_jpg(path="d:\\1.png", filename=‘1.png‘)

# 3.添加bug, 调用上个接口返回的地址作为请求参数

add_bug(title="yoyoketang-这是一个bug描述1225", jpg=jpg)

20180606231840117134.png

# 上传多个附件

# 传多个文件的时候如下,这两个参数的name都是一样的,如果用字典去传key值,很显然python的key值是不能重复的

‘‘‘

Content-Disposition: form-data; name="files[]"; filename="1.png"

Content-Type: image/png

Content-Disposition: form-data; name="files[]"; filename="2.png"

Content-Type: image/png

# 2.这时候需要换个格式,传list数据

‘‘‘

# file = {

# "files[]": ("1.png", open("d:\\1.png", "rb"), "image/png"),

# "labels[]": "tu1",

# }

# -------------多个文件用list类型------------

file = [

("files[]", ("2.png", open("d:\\1.png", "rb"), "image/png")),

("labels[]", "tu1"),

("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")),

("labels[]", "tu2"),

]

20180606231840153269.png

# multipart/form-data传文件

from requests_toolbelt import MultipartEncoder

import requests

m = MultipartEncoder(

fields={

‘field0‘: ‘value‘,

‘field1‘: ‘value‘,

‘field2‘: (‘filename‘, open(‘file.py‘, ‘rb‘), ‘text/plain‘)

}

)

r = requests.post(‘http://httpbin.org/post‘,

data=m,

headers={‘Content-Type‘: m.content_type})

20180606231840204052.png

# multipart/form-data传非文件表单

from requests_toolbelt import MultipartEncoder

import requests

m = MultipartEncoder(

fields={

‘field0‘: ‘value‘,

‘field1‘: ‘value‘,

‘field2‘: (‘filename‘, open(‘file.py‘, ‘rb‘), ‘text/plain‘)

}

)

r = requests.post(‘http://httpbin.org/post‘,

data=m,

headers={‘Content-Type‘: m.content_type})

20180606231840247999.png

# multipart/form-data传多个文件

from requests_toolbelt import MultipartEncoder

import requests

m = MultipartEncoder(

fields = [

(‘source‘, (‘f1.ext‘, f1, ‘application/x-example-mimetype‘),

(‘source‘, (‘f2.ext‘, f2, ‘application/x-example-mimetype‘),

]

)

r = requests.post(‘http://httpbin.org/post‘,

data=m,

headers={‘Content-Type‘: m.content_type})

20180606231840289993.png

# 上传多个附件代码

# coding:utf-8

import requests

from requests_toolbelt import MultipartEncoder

host = ‘http://127.0.0.1:81‘ # 禅道的服务器地址

def login(s,user="admin",psw="e10adc3949ba59abbe56e057f20f883e"):

u‘‘‘登录禅道‘‘‘

loginUrl = host+"/zentao/user-login.html"

h = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

"Accept-Encoding": "gzip, deflate",

"Referer": host+"/zentao/user-login.html",

# "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的

"Connection": "keep-alive",

"Content-Type": "application/x-www-form-urlencoded",

}

body = {

"account": user,

"password": psw,

"keepLogin[]": "on",

"referer": host+"/zentao/my/"

}

try:

r = s.post(loginUrl, data=body, headers=h)

print(r.content) # 打印结果看到location=‘http://127.0.0.1/zentao/my/‘说明登录成功了

if "/zentao/my/" in r.content:

print("登录成功!")

return True

else:

print("登录失败:%s" % r.content)

return False

except Exception as msg:

print("登录失败:%s"%str(msg))

return False

def upload_jpg(s):

u‘‘‘上传图片‘‘‘

# url1 = host+"/zentao/file-ajaxUpload-5a26aca290b59.html?dir=image"

m = MultipartEncoder(

fields={

"localUrl": (None, "1.png"),

"imgFile": ("1.png", open("d:\\1.png", "rb"), "image/png")

})

try:

r1 = s.post(url1, data=m, headers={‘Content-Type‘: m.content_type})

jpg_url = r1.json()["url"]

return jpg_url

except Exception as msg:

print("上传失败:%s"%str(msg))

return ""

def submit_bug(s,jpg_url,title="yoyoketang-这是一个带附件的内容"):

# 提交bug, 带上附件

url2 = host+"/zentao/bug-create-1-0-moduleID=0.html"

m = MultipartEncoder(

fields = [

("product", "1"),

("module","0"),

("project", ""),

("openedBuild[]", "trunk"),

("assignedTo", "admin"),

("type", "codeerror"),

("os", "all"),

("browser", "all"),

("color", ""),

("title", title), # bug标题参数化

("severity", "3"),

("pri", "0"),

("steps", u‘

[步骤]

\

1、第一步点

\

2、第二步点

\

3、点三步点

\

[结果]

\

%s

\

[期望]

‘ % jpg_url), # 正文图片地址参数

("story", "0"),

("task", "0"),

("mailto[]", ""),

("keywords", ""),

# 这里的四个参数就是上传文件附件了

("files[]", ("1.png", open("d:\\1.png", "rb"), "image/png")), # 附件1

("labels[]", "tu1"),

("files[]", ("2.png", open("d:\\2.png", "rb"), "image/png")), # 附件1

("labels[]", "tu2"),

("uid", "5a2955c884f98"),

("case", "0"),

("caseVersion", "0"),

("result", "0"),

("testtask", "0")

])

try:

r2 = s.post(url2, data=m, headers={‘Content-Type‘: m.content_type})

print(r2.content.decode("utf-8"))

except Exception as msg:

print("提交BUG失败:%s"%str(msg))

if __name__ == "__main__":

s = requests.session() # 保持会话

login(s, user="admin", psw="e10adc3949ba59abbe56e057f20f883e") # 登录

jpg = upload_jpg(s) # 上传图

# 获取上传图片后用的url地址传给提交bug的正文

submit_bug(s, jpg, title="yoyoketang-这是一个带附件的内容")

20180606231840332963.png

20180606231840414021.png

20180606231840456991.png

20180606231840535119.png

原文地址:https://www.cnblogs.com/zhongyehai/p/9147815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值