- 积分
- 16844
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2017-12-20 22:16:14
|
显示全部楼层
Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例6 O* q3 K0 h2 R
! y, }* C' ~% h. u: K3 Q#coding=utf-8
) w6 U+ ^4 R Hfrom selenium import webdriver
" K9 p; `! o! `from selenium.webdriver.common.by import By
9 X' C/ _! { N y/ \+ S" Lfrom selenium.webdriver.common import keys
0 v: k; V) y m) bfrom selenium.webdriver.support import select
- j7 t- y& G9 j( O6 e9 q" P) Zfrom selenium.common import exceptions
& E5 O: K2 w; a$ N* ^import unittest,time,re" | b) l8 g# F3 C
class Baidu(unittest.TestCase):
9 p# e- \8 W) G, T4 c6 n #setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#
" V3 ~" I$ J& j) } def setUp(self):
! s1 a6 U2 ^0 L- F self.driver=webdriver.Firefox()
3 _* K/ R; o; Q3 b. r self.driver.implicitly_wait(30)/ H, P0 U. j% m2 |3 ^7 ]0 a
self.base_url='http://www.baidu.com/'
4 I; P. t' V0 I* b& F9 s, l3 P self.verificationErrors=[] #脚本运行时,错误的信息将被打印到这个列表中#& _5 v' j6 S y. K4 B, ?
self.accept_next_alert=True #是否继续接受下一个警告#
9 [0 v7 u) K/ c- |0 j* x) m# W5 |9 A #百度搜索用例4 p# O' J( S8 M2 p7 u" K) {
def test_baidu_serch(self):' l3 X# v& a1 E
driver=self.driver
4 P* }0 t3 ^$ @; I driver.get(self.base_url)
% S( ^! ]/ m4 e7 v7 M- {0 l driver.find_element_by_id("kw").send_keys("selenium webdriver")
6 [( J! u) s# F driver.find_element_by_id("su").click()1 b7 H' t5 w, [ t y) H! O
time.sleep(2): Y$ O6 R2 L1 h1 W5 N* p
driver.quit()! g8 A( B6 ~9 E# v. E. d
#百度设置用例
/ x$ T7 i7 s1 D' k: z5 o def test_baidu_set(self):! x$ Z4 ?& w$ \: t+ d1 W1 `. _# C# j
driver=self.driver
( f6 w6 Q4 ?7 m4 {# U' |$ a #进入搜索设置页9 G, P. \9 s v8 ?) I
driver.get(self.base_url+'gaoji/preferences.html')
. e `8 ~; K7 L6 F6 V; N m=driver.find_element_by_name('NR')
8 `! H* E, n5 l3 O0 a f #设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮0 c8 R) a$ q- n2 U. [
m.find_element_by_xpath("//option[@value='100']").click()0 ?2 l% {8 P8 y1 t, D+ J+ R
time.sleep(2)
/ T9 O. r# Y. z; z7 S #保存设置的信息
( T1 P6 q. E+ g9 o+ V# v Q driver.find_element_by_xpath("//input[@value='保存设置']").click()
! A$ ?6 C' z* k time.sleep(2)- n+ B) \" l1 I) g1 a$ O
n=driver.switch_to_alert()
2 X% d! T) J; U" T% v n.accept()* Z2 @) c9 ^' Q; p
def tearDown(self):+ ^8 a* r$ W* D ?4 q2 E5 j! c
self.driver.quit()! Q9 |& @2 d1 w% G0 t0 T- Q2 a0 k- k
self.assertEqual([],self.verificationErrors)! o: Z1 i, \' h
'''
6 u: n8 n2 N: J5 T6 z tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
* x3 q0 Q m2 r( M6 u self.assertEqual([], self.verificationErrors) 是个难点,% A' g; r* t% X* E! }5 {
对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
" \; p. u& H& b- M3 D0 n; Yif __name__=="__main__":5 p9 s7 c' g# t+ }
unittest.main() #执行用例#* K# H4 L7 G2 X3 v/ Z p8 A
# H! R/ T# m% E1 r" M' q- G7 R# f& b
'''
5 `7 P, ?* D! x/ ^( Q* r执行结果如下:( z+ j0 F4 Z2 A/ u e
Ran 2 tests in 30.719s 执行测试完所有测试用例,用了70.719S
! @' \ I3 {& j t) U: } ) Z. m' y& F( a. G# I
ok 没有问题
' F+ n( {. d9 ?
* Z: k* h" B6 ]0 c+ U5 V8 U如果你在用例中故意设置一个错误,例如:/ N# r; z/ ~9 O) k6 x! g% C& c
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,. O6 G) ]/ b& A: \
driver.find_element_by_name('DR').click()7 P" }' {3 Z7 T- L% c% y
这时执行结果显示如下:6 H0 k+ O0 ^( L' \4 u
Ran 2 tests in 70.719s. p/ a. W9 O; \1 H8 I
' F( R7 \8 N: f3 kFAILED (errors=1)
4 G# {' D. d' p# ]$ f, Z: z0 y7 C'''
, q7 F3 F' J% n; L' Q; ^) }1 p& P) B4 M/ l. e& P
|
|