|
|
楼主 |
发表于 2017-12-20 22:16:14
|
显示全部楼层
Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例9 H7 D2 f8 c5 k
1 `$ Q" |% L$ b0 F' ~, C) o9 M#coding=utf-8
8 ^2 ~& }' g2 J( l4 Hfrom selenium import webdriver
( T; G: ^3 C0 f% Efrom selenium.webdriver.common.by import By- u3 |) n0 q# Y9 t
from selenium.webdriver.common import keys
# Q- I+ \! W( s6 |/ t. g& X/ `3 ]from selenium.webdriver.support import select
8 s" v" g+ u" J& |5 J4 zfrom selenium.common import exceptions: L0 Q7 c1 G Z( V4 a' J8 H
import unittest,time,re% s" d$ L; Y. Z' q
class Baidu(unittest.TestCase):' ?2 k% N) L$ R9 _/ s1 Z( Z& M
#setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#
$ P% p9 y# G4 Z1 r" B def setUp(self): ; P0 Q% N4 f. T5 ~
self.driver=webdriver.Firefox()5 _- ]0 B/ {3 S" r* }. b
self.driver.implicitly_wait(30)
) ]! Y+ R+ U' p7 L3 m/ l& Q4 L% O! t8 O self.base_url='http://www.baidu.com/'
, n( D4 j9 F" [6 c! \( a4 | self.verificationErrors=[] #脚本运行时,错误的信息将被打印到这个列表中#
1 d( h1 S5 s8 u$ h; \6 e self.accept_next_alert=True #是否继续接受下一个警告## u/ A) T4 K2 P5 h2 m% J; j0 a
#百度搜索用例
- h$ N7 R& d8 L0 t y0 C7 O def test_baidu_serch(self):3 ^* S& } |+ V0 g
driver=self.driver( l9 e0 A: T* h$ K, L, y
driver.get(self.base_url)
+ i- s( \* |$ V# ~7 B P driver.find_element_by_id("kw").send_keys("selenium webdriver")
! Z. c+ m% K1 i9 q5 N/ P+ r3 u' E driver.find_element_by_id("su").click()
1 ]2 v! C( x6 z4 ]" D" D9 V- R time.sleep(2)
5 B; u- G/ E' X; D: i, n driver.quit()
; n4 `8 }1 |/ O' I ~; w- c1 s #百度设置用例
' S& f0 R) H# ?0 ~' }' Y def test_baidu_set(self):
/ H+ P6 u8 x E" Y" I/ | driver=self.driver1 d! @- d' O: D, n' X: \
#进入搜索设置页
" }- D; u* I- T driver.get(self.base_url+'gaoji/preferences.html')
|; C- [% J1 Y6 E m=driver.find_element_by_name('NR') ) F: ^# ]9 y; x5 z6 h& p
#设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮
; u% f! M5 K. b6 ] m.find_element_by_xpath("//option[@value='100']").click()2 v" n7 V( t0 F+ c. A; n
time.sleep(2)
: J1 n7 B$ N9 r* v* E A #保存设置的信息/ {/ P* S) V) S k
driver.find_element_by_xpath("//input[@value='保存设置']").click()8 c2 P6 R8 A9 f4 o
time.sleep(2)+ V0 t9 A; w4 }* T6 p
n=driver.switch_to_alert()
& W" n0 V/ j3 k- c6 k9 Z+ Z n.accept()
. r, }3 |* n+ d$ l def tearDown(self):) g( S. o, _; H9 h
self.driver.quit()+ z$ X+ Z1 \- K2 b) w
self.assertEqual([],self.verificationErrors)' N- V) h# N: \5 p+ c. ]
'''1 \+ |1 t- G& b4 F4 y8 b* _
tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。 2 G2 x/ S( y/ m# a. P+ d! |
self.assertEqual([], self.verificationErrors) 是个难点,, Q) w; x1 z2 V+ J- u* P# B9 W
对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
& P8 b- x7 k9 s6 g Lif __name__=="__main__":1 B0 @: B$ Y# r: u
unittest.main() #执行用例#$ a% [0 {1 C# g
: F. l, L' i$ d3 V; ~5 z'''! O% |7 Q, K+ N. Z5 q& X1 p# \
执行结果如下:( p8 Z/ Y7 o+ i, B
Ran 2 tests in 30.719s 执行测试完所有测试用例,用了70.719S5 [/ l. C( a+ ^$ C- t& h; Z
j' T& ~% \5 y, j
ok 没有问题! K9 ?* f. y" e3 j3 M/ C9 m
( F/ |+ R3 p" R0 C3 H! m& U( Q0 C1 p
如果你在用例中故意设置一个错误,例如:' C2 Y) \4 y, Z3 x: @
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,( U5 H7 ?1 \3 O9 Y
driver.find_element_by_name('DR').click()5 X, r6 }$ `/ Y5 o. V, h3 ?6 \
这时执行结果显示如下:
6 J+ G" V+ N; q3 U' C3 zRan 2 tests in 70.719s
! Z7 _# ]# i% |4 _& a
( p: q9 I9 ]+ j, x8 M% _0 RFAILED (errors=1)
2 U4 @9 P/ I" O( o9 d8 l''') a0 L5 p5 s- F8 w/ ]- a
; u ]' j6 ?6 j* g1 x' ^
|
|