用Python做测试过程中遇到问题的解决方案合集

发表于:2017-3-14 11:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51Testing    来源:51Testing软件测试网原创

  1、Python单元测试如何理解与实现?
  问题描述:学习瓶颈期.能理解单元测试的原因和简单原理,但是由于各式各样的原因(主要是英文差的很)所以不知道怎么去完成,目前打算使用nose2
  不知道是不是可以得到一些帮助
  解决办法:
  51Testing会员黄哥回复:
  1)首先要搞清楚单元是啥。
  2)单元测试的意义。
  3)利用测试套件,照着例子写测试用例
  4)讲究一点,还得生成一个测试报告,发一个邮件通知一下。照着文档写~
  2、求适合Python基于数据驱动的测试工具推荐?
  解决办法:
  51Testing会员孙景卫回复:
  请问测试对象是?python写的模块?还是要用Python写测试工具?建议再详细描述一下你的需求。
  用python的meta class和自省的机制很容易实现一套数据驱动框架的。
  3、Python做接口测试,如何带上Cookie?
  问题描述:
#引入需要的module
import http.client, urllib.parse,urllib.request
import http.cookiejar
import http.cookies
import re
#创建请求参数
params = urllib.parse.urlencode({'email':'XXXXXXX', 'password': 'XXXXX', 'origURL': '人人网 中国领先的实名制SNS社交网络。加入人人网,找到老同学,结识新朋友。','domain':'renren.com'})
#创建请求头
headers = {"Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"Accept": "text/plain",
"Referer":"应届生校招网 [即人人校招]-应届生2013年校园招聘、宣讲会,应届生找工作职位",
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"
}
#链接网站
conn = http.client.HTTPConnection("人人网 中国领先的实名制SNS社交网络。加入人人网,找到老同学,结识新朋友。")
#提交接口请求
conn.request("POST", "/PLogin.do", params, headers)
#获取请求的响应
response = conn.getresponse()
#打印响应的状态码,以字典打印出返回的头部msg
print(response.status, response.reason,response.msg)
dic=response.msg
#关闭链接
conn.close()
#生成一个http.cookiejar对象
cj=http.cookiejar.CookieJar()
#新建一个opener
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
#植入opener
urllib.request.install_opener(opener)
#打开重定向的网址
h=opener.open(L)
h2=h.read().decode('utf-8')
#打印所有的cookie
for item in cj:
print(item.name,'=',item.value,'\n')
if item.name=='xnsid':
headers['xnsid']=item.value
rtk=re.findall(r'\'\w+\'',str(h2))
print(rtk[1][1:-1])
params2={}
params2['_rtk']=str(rtk[1][1:-2])
params2=urllib.parse.urlencode(params2).encode()
conn2=http.client.HTTPConnection('xiaozhao.renren.com')
conn2.request('POST','/message/count',params2,headers)
response2=conn2.getresponse()
print(response2.status,response2.reason,response2.msg)
print(response2.read().decode('utf-8'))
conn2.close()
  解决办法:
  (1)51Testing会员云层回复:
  如果你使用的http组件支持添加cookie,那最好
  如果没有只能通过header加一个名字为cookie的header,但这样的缺点是会覆盖原有的内部cookie
  一般做的比较成熟的http组件都是有独立的cookie管理对象的
  (2)51Testing会员回复:
  接口测试推荐使用requests库
  requests支持带持久 Cookie 的会话
  s = requests.Session()
  s.post(url, headers=headers, data=params)
  就解决你的问题了
  4、Python如何写关于抽象类的单元测试?
  问题描述:从abc中import了ABCMeta和abstractmethod,实现了一个抽象类,目前想用nose(目前仅仅是unittest)对这个类进行单元测试,不知道有没有比较好的方式?(Python版本2.7的)
  在Stackoverflow上给了几种方式:
  1、通过一个其他类实现抽象类方法测试:unit testing;
  2、构建特殊函数,提取方法创建新类:oop - python;
  Python中对抽象类测试有无必要?上述方式是否有效或者有无其他方式进行测试?
  解决方法:
  51Testing会员回复:
  已解决,raise NotImplementedError,通过一个子类来实例方法。
  ----------------------------------------
  算了,补充完整吧:
  1、一般来说抽象类是没有实例化方法的,这个和单纯的abstractmethod不同,abstractmethod会在调用的时候检验是否实现功能,所以如果想要测试抽象类中的抽象方法,需要子类继承这个抽象类。
  2、继承了以后调用方法单纯的pass是看不出来效果的,raise的方法可以抛出异常,这样可以通过捕获异常进行测试。Nose中nose.tools提供了raises的装饰器,在测试函数前添加raise的异常就可以检验到该抽象类是否被调用到。
  注:
  1、关于异常,NotImplementedError比较恰当,官方文档有说明:
  exception NotImplementedError
  This exception is derived from RuntimeError. In user defined base classes, abstract methods
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号