经伟

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

前面有一篇对于常见元素的识别和操作的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参数。

 

posted on 2015-12-11 18:30  经伟  阅读(3457)  评论(0编辑  收藏  举报