|
|
楼主 |
发表于 2017-12-20 22:16:14
|
显示全部楼层
Python自动化测试--一个简单的自动化测试脚本--批量执行测试用例, m( f& R0 ]5 w+ M
2 p y* n9 `- O: E5 U#coding=utf-80 f, V) g: G! A, n- O- q
from selenium import webdriver; S# f& i5 v( k) u5 |
from selenium.webdriver.common.by import By
/ ]" p' c7 y1 {0 B( h# zfrom selenium.webdriver.common import keys8 M$ b, F2 w7 D- ^/ \0 O
from selenium.webdriver.support import select. i; F/ c( C+ _6 g
from selenium.common import exceptions( [' x2 ?$ C! g$ i3 s8 D
import unittest,time,re1 |6 _" {) ~, z% p' X; ?/ V3 _
class Baidu(unittest.TestCase):- a" _( G: e7 T, h& w
#setUp 用于设置初始化的部分,在测试用例执行前,这个方法中的函数将先被调用。这里将浏览器的调用和URL的访问放到初始化部分。#* u. \8 L9 L1 P
def setUp(self):
- Q" m' [( \5 Q3 }6 W& C3 O self.driver=webdriver.Firefox()" e4 `+ r8 ^0 l1 E0 {% P
self.driver.implicitly_wait(30)
" ` h; B& v$ D self.base_url='http://www.baidu.com/'( `7 I+ \. ~- m7 T2 r
self.verificationErrors=[] #脚本运行时,错误的信息将被打印到这个列表中#& X; y6 a6 p$ M7 w, a
self.accept_next_alert=True #是否继续接受下一个警告#
: j" i' Z0 @, m: O$ u) m" `4 q+ L7 L #百度搜索用例
8 q( e/ W+ E8 a- _% T def test_baidu_serch(self):. x& l) ?* k" }' L
driver=self.driver. G" z5 F& j' s! U& V+ G# L
driver.get(self.base_url)
( N" ?, }& h5 {: r driver.find_element_by_id("kw").send_keys("selenium webdriver")
7 y# [; c' v2 p0 l4 K driver.find_element_by_id("su").click()
) v" w' {; I( Q time.sleep(2)
7 r" f- j! ~$ i! [7 b1 L. _ driver.quit()/ E; C, `" W& V1 I e! `' ]
#百度设置用例7 w9 x8 ?8 D/ F0 T8 H( y* C! T
def test_baidu_set(self):( _( ^1 ^; b5 J$ a5 _6 y
driver=self.driver* F; B2 H; N; R2 [ ^* Y9 ?
#进入搜索设置页$ }- b/ c: I; v5 l* d$ k! X
driver.get(self.base_url+'gaoji/preferences.html') + H" r$ O2 p6 ?' u& z
m=driver.find_element_by_name('NR')
- K% s" G+ U, I #设置每页搜索结果为100条,先找到ID=NR的标签,再找到ID=NR标签下的option标签value值等于100的选择按钮
6 @' U1 a' `$ l! C m.find_element_by_xpath("//option[@value='100']").click()4 e# d; t' Q* j9 x( K
time.sleep(2)
9 j, t- e1 J7 u9 [* Q #保存设置的信息
# l/ \6 s$ v. I$ M4 T1 s2 b driver.find_element_by_xpath("//input[@value='保存设置']").click()# e$ h+ m; Q- R# z5 f7 d1 [
time.sleep(2) z6 t: v9 J% S: [# c
n=driver.switch_to_alert()4 d6 N* v* s+ z/ ?
n.accept(). J4 b& G+ H' B4 j- n* I' u
def tearDown(self):- c; K# E# G. u- H5 [
self.driver.quit()
$ g- T ~ T5 g G7 e self.assertEqual([],self.verificationErrors): D5 }. d" e9 S
'''
5 ]! o& q, I" Y8 d. O& s tearDown 方法在每个测试方法执行后调用,这个地方做所有清理工作,如退出浏览器等。
! x9 t0 x) }7 V self.assertEqual([], self.verificationErrors) 是个难点,
# G# u2 e9 i3 i u 对前面verificationErrors方法获得的列表进行比较;如查verificationErrors的列表不为空,输出列表中的报错信息。'''
- s) m$ Z# x7 ~9 {. Q) c O) Oif __name__=="__main__":
$ t0 m+ `! z) ~ unittest.main() #执行用例#8 n. X5 Z4 g; B+ m" [0 f
1 |: j8 ~. L4 k- W2 C7 p
'''# j* G; V0 K' w$ i( i
执行结果如下:: g; w3 r1 ]9 ]: b+ P
Ran 2 tests in 30.719s 执行测试完所有测试用例,用了70.719S( e4 N! Q" |1 T. T. ?( }( Y
) N2 u" K; c4 G. B: Jok 没有问题4 a! ]& M9 f. g a. L) x: \
2 q3 I# o8 K" n& G
如果你在用例中故意设置一个错误,例如:6 | d4 _6 _# t. z- P1 U
百度设置用例中增加这样一行代码,查找到name为DR的标签,并单击它,因为这个是没有的,找不到这个标签,系统会报错,
\ t/ V5 [ L$ P* ?8 Pdriver.find_element_by_name('DR').click(), ?4 ^0 W7 F5 U' U0 A; ^; }' ?
这时执行结果显示如下:
- _6 ^- I. z( u9 l9 V' xRan 2 tests in 70.719s$ c9 X! y; w* @" F' V+ n, a% V$ P
5 K0 R4 u/ s# t7 DFAILED (errors=1)
* P3 p( |- T- \/ w2 ^ s u* H'''
8 H4 f# T: c1 m6 p& _
* u$ ~- l9 {* y4 C9 Y# L3 V |
|