问题描述:学习瓶颈期.能理解单元测试的原因和简单原理,但是由于各式各样的原因(主要是英文差的很)所以不知道怎么去完成,目前打算使用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