Changes between Initial Version and Version 1 of webtest/sleep_until


Ignore:
Timestamp:
11/26/2013 11:29:51 AM (12 years ago)
Author:
chenyang
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • webtest/sleep_until

    v1 v1  
     1== 如何测试异步实现的功能 == 
     27.0论坛的发帖功能使用ajax异步提交请求,为了验证发帖,我们需要在发帖后,让当前线程睡眠N秒,等待发帖完成,如下: 
     3[[BR]] 
     4{{{ 
     5                ...... 
     6                #点击发帖按钮 
     7                driver.find_element_by_css_selector("div.fatie_action > a > img").click() 
     8                 
     9                #当前线程睡眠10秒,等待发帖完成 
     10                time.sleep(10) 
     11 
     12                #断言帖子标题 
     13                self.assertNotEqual(-1,driver.title.find(title)) 
     14                ...... 
     15}}} 
     16这里有一个问题,10秒,是一个漫长的等待过程,但如果设置1秒呢,发帖并不一定能完成,接下来的断言会失败,而且,10秒只是一个我们估算出来的 
     17[[BR]] 
     18在大多数情况下,完成发帖所花费的时间。有时,可能10秒也不够,那么发帖到底需要多少时间呢?我们可以开发函数来监控 
     19{{{ 
     20        def sleep_until_done(fun, timeout = 30): 
     21                u''' 检查指定的条件是否成熟, 若未成熟则继续sleep,直到超时 ''' 
     22                for v in range(0, timeout): 
     23                        if fun(): 
     24                                return True 
     25                        else: 
     26                                time.sleep(1) 
     27                return False 
     28 
     29}}} 
     30我们知道如果发帖成功,那么浏览器会重定向到帖子页.利用这个检查方法, 现在我们开发条件函数 
     31{{{ 
     32        def is_topic_page(self): 
     33                u''' 是否是帖子页 ''' 
     34                driver = self.driver 
     35                topic_url = driver.current_url 
     36                regex = self.base_url + "/topic-" + "\d+\.html"  
     37                match = re.match(regex, topic_url)  
     38                return match is not None 
     39}}} 
     40 
     41现在,我们来优化一下,发帖的过程 
     42{{{ 
     43                ...... 
     44                #点击发帖按钮 
     45                driver.find_element_by_css_selector("div.fatie_action > a > img").click() 
     46 
     47                #当前线程休眠,完成发帖过程 
     48                functions.sleep_until_done(self.is_topic_page) 
     49 
     50                #断言帖子标题 
     51                self.assertNotEqual(-1,driver.title.find(title)) 
     52                ...... 
     53}}}