unittest框架实战(一)

来源:互联网 发布:店面招牌设计软件 编辑:程序博客网 时间:2024/06/15 04:06

实际的项目去使用unittest框架测试

在页面操作的时候,可能一次操作并不能成功,需要多次的操作,可是你又不知道需要几次,所以这个小方法刚刚好解决了,定位的问题WebDriverWait().until()这个方法也不一定可以执行成功,有的时候也会页面的加载情况而执行失败

在开始之前先完成一些的小的方法, 在构建整个测试当中更加友好

之前一直是使用robot framew来进行整个自动化测试的,后来因为个人兴趣决定使用python实现一下

在robot framew中有一个关键字是wait until keyword succeeds,在给定的时间内去执行你传入的方法,超时报错,可以设定最大时间和最小时间,最小时间用来限定多长时间传入的方法运行一次

1.做一个运行函数的方法

    def _Run(self, name, *args):
        '''|运行方法
            |函数当做参数去传递
        '''
        return name(*args)

2.构建一个方法,功能如:1)可以运行其他的方法 2)执行失败后反复执行 3)超过给定的时间后报错

    def _Wait_Run(self, name, *args):
        '''
        ||由时间来控制函数的运行
        |操作完成后直接return,结束函数
        |超过时间限制的时候跳出循环,return 结束函数
        '''
        endtime = time.time() + float(5)
        while True:
            try:
                return self._Run(name, *args)
            except BaseException as e:
                print 'Your Fail: %s' % e
            remaining = endtime - time.time()
            if remaining <= 0:
                raise
            time.sleep(min(remaining, 0.01))

endtime 相当于你给定的最大时间,超过后即报错    return self._Run(name, *args)你要运行的方法

做的比较简单,但是也够用了,我这个最大执行时间和最小时间是写死的,也可以做成传参,但是后来想了想没有必要所以就没有做

示例:

    def _input(self, text, *loc):
        # 输入字符串

        return self.driver.find_element(*loc).send_keys(text)

    def Input(self, text, *loc):
        # 输入text
        return self._Wait_Run(self._input, text, *loc)

driver = webdriver.Firefox()
driver.get('http:www.baidu.com')
driver.maximize_window()
Input(self.Input, text, *(By.ID, 'kw'))
可能缩进上有一些问题,自己试的时候注意

因为自己比较笨,在\一开始在做的时候陷入了一个小坑里,一开始想的是用多线程的方法来解决这个问题,一个线程去执行方法,一个线程去计时.实现了好长时间,并没有实现成功,并没有想到这个方法,更多的还是因为经验不足的原因.第二个小坑,不知道怎么样去判定是否执行成功,而click(), send_keys()等方法的返回值为None,也陷入了坑里面,想了好几天不知道怎么一不小心想到了,可以不用去管执行成功,只截取失败,失败后循环就可以了.