前面有一篇对于常见元素的识别和操作的python自动化脚本,这一篇就接着聊下python的类继承,已经它的第三款unittest框架,和报告收集包HTMLtestRunner的应用。
还是直接上代码吧。
unittest和HTMLtestrunner的应用:
# coding = utf-8 import time import unittest import HTMLTestRunner import os import sys from selenium import webdriver # 继承unittest类 class testClass(unittest.TestCase): # unittest提供的初始化方法,setup,可以在这里进行一些初始化的准备工作 def setUp(self): print "setup" self.driver=webdriver.Firefox() self.driver.get("http://www.baidu.com") time.sleep(3) # 下面是测试方法 def testsearch2(self): input=self.driver.find_element_by_id(‘kw‘) search=self.driver.find_element_by_id(‘su‘) input.send_keys("byebye") search.click() def testsearch(self): input=self.driver.find_element_by_id(‘kw‘) search=self.driver.find_element_by_id(‘su‘) input.send_keys("hello") search.click() print "assertion" self.assertTrue(search.is_displayed(),"baidu yixia should display") # 运行结束后的处理动作 def tearDown(self): print ‘test down...‘ #driver.quit() self.driver.close() if __name__ == ‘__main__‘: #unittest.main(), 这里要说明一下, 如果测试方法是以test开头的,那么unittest可以识别出来,这里就可以直接调用它的main方法来执行所有测试方法了,运行顺序就是按测试方法的名字排序 #unittest.TestCase.assertTrue() #这块是获取项目路径,后面在生成report时会放到改目录下 current_path=os.getcwd() print ‘current path: ‘,current_path project_path=os.path.dirname(current_path) print "project path:",project_path #这块是通过unittest的testsuite方式来组织测试 testsuite=unittest.TestSuite() #testsuite.addTest(testClass("testsearch2")) testsuite.addTest(testClass("testsearch")) temp=str(time.time()) filedir=project_path+"//report//"+temp os.makedirs(filedir) filename="//pyresult.html" filepath=filedir+filename fp=file(filepath,‘wb‘) # 调用HTMLtestrunner来执行脚本并生成测试报告,html格式的 runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=‘report‘,description=‘demo‘) runner.run(testsuite)
注: 上面带#号的都是注释, 由于直接编辑的原因,所以他没有显示成绿色,大家如果要复制出来,记得注意调整一下。
Python类的继承:
#coding=utf-8 from pyse import Pyse from time import sleep class Page(object): #login_url = ‘http://www.126.com‘ def __init__(self, selenium_driver, base_url, parent=None): self.base_url = base_url self.driver = selenium_driver self.timeout = 30 self.parent = parent def _iopen(self,url): #url = self.base_url + url self.base_url=url self.driver.open(url) assert self.on_page(),‘Did not land on %s‘ % url def iopen(self): self._iopen(self.url) def on_page(self): print ‘get_url is: ‘,self.driver.get_url() print ‘base_url is: ‘,self.base_url return self.driver.get_url() == self.base_url class login(Page): def systemout(self): print ‘pass‘ def testlogin(): driver=Pyse(‘ff‘) print ‘get in‘ url=‘http://www.baidu.com/‘ lg=login(driver,‘‘) lg._iopen(url) if __name__==‘__main__‘: testlogin()
这块是python类的继承,page继承根object类,然后login继承了page类,然后login就可以使用page类的方法了。
这里要说明的是,page类有2个方法,一个是_iopen(), 另一个是iopen(), 他们的区别就是,在用login的对象调用时:
调用iopen,不需要url参数,但是需要login类有url的成员,因为在其父类page里的self.url其实就是调用login自己的url成员。
而调用_iopen时,可以直接传递一个url参数。
时间: 2024-10-04 21:53:41