# 測試用例優化
* [引入單元測試框架](http://brtc.imsam.cn/1380706#_95)
* [封裝公共部分](http://brtc.imsam.cn/1380706#_198)
* [使用setUp和tearDown優化](http://brtc.imsam.cn/1380706#setUptearDown_236)
* [斷言](http://brtc.imsam.cn/1380706#_273)
* [封裝到public中](http://brtc.imsam.cn/1380706#public_342)
之前我們所寫的是線性代碼
~~~
#coding=utf-8
# @Author: SamWang
# @Date: 2019-11-15 16:33:56
# @Last Modified time: 2019-11-16 10:42:48
from selenium import webdriver
from time import sleep
# 登錄成功
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('test123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#wp-admin-bar-my-account').text
if 'test' in login_msg:
print('登錄成功用例:pass')
else:
print('登錄成功用例:fail')
d.close()
d.quit()
# 用戶名為空密碼正確填寫,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('test123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '用戶名一欄為空' in login_msg:
print('用戶名為空密碼正確填寫,登錄失敗:pass')
else:
print('用戶名為空密碼正確填寫,登錄失敗:fail')
d.close()
d.quit()
# 密碼為空用戶名正確填寫,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '密碼一欄為空' in login_msg:
print('密碼為空用戶名正確填寫,登錄失敗:pass')
else:
print('密碼為空用戶名正確填寫,登錄失敗:fail')
d.close()
d.quit()
# 用戶名正確密碼錯誤時,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('tes222t123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '密碼不正確' in login_msg:
print('用戶名正確密碼錯誤時,登錄失敗:pass')
else:
print('用戶名正確密碼錯誤時,登錄失敗:fail')
d.close()
d.quit()
~~~
> ### 引入單元測試框架
~~~
#coding=utf-8
# @Author: SamWang
# @Date: 2019-11-15 16:33:56
# @Last Modified time: 2019-11-16 10:45:53
from selenium import webdriver
from time import sleep
import unittest
class mytest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_login_success(self):
# 登錄成功
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('test123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#wp-admin-bar-my-account').text
if 'test' in login_msg:
print('登錄成功用例:pass')
else:
print('登錄成功用例:fail')
d.close()
d.quit()
def test_login_username_empty(self):
# 用戶名為空密碼正確填寫,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('test123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '用戶名一欄為空' in login_msg:
print('用戶名為空密碼正確填寫,登錄失敗:pass')
else:
print('用戶名為空密碼正確填寫,登錄失敗:fail')
d.close()
d.quit()
def test_login_password_empty(self):
# 密碼為空用戶名正確填寫,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '密碼一欄為空' in login_msg:
print('密碼為空用戶名正確填寫,登錄失敗:pass')
else:
print('密碼為空用戶名正確填寫,登錄失敗:fail')
d.close()
d.quit()
def test_login_password_error(self):
# 用戶名正確密碼錯誤時,登錄失敗
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys('test')
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys('tes222t123')
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
login_msg = d.find_element_by_css_selector('#login_error').text
if '密碼不正確' in login_msg:
print('用戶名正確密碼錯誤時,登錄失敗:pass')
else:
print('用戶名正確密碼錯誤時,登錄失敗:fail')
d.close()
d.quit()
if __name__ == '__main__':
unittest.main()
~~~
> ### 封裝公共部分
~~~
from selenium import webdriver
from time import sleep
import unittest
def login_action(d,username,password):
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys(username)
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys(password)
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
class mytest(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_login_success(self):
# 登錄成功
d = webdriver.Chrome()
d.maximize_window()
d.implicitly_wait(10)
login_action(d=d,username='test',password='test123')# 調用登錄函數
login_msg = d.find_element_by_css_selector('#wp-admin-bar-my-account').text
if 'test' in login_msg:
print('登錄成功用例:pass')
else:
print('登錄成功用例:fail')
d.close()
d.quit()
~~~
> ### 使用setUp和tearDown優化
~~~
from selenium import webdriver
from time import sleep
import unittest
def login_action(d,username,password):
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys(username)
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys(password)
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
#同一個類下,如果該方法的變量想要能夠被其他方法所使用,則在定義變量時,加上一個self.
class mytest(unittest.TestCase):
def setUp(self):
self.d = webdriver.Chrome()
self.d.maximize_window()
self.d.implicitly_wait(10)
def tearDown(self):
self.d.close()
self.d.quit()
def test_login_success(self):
# 登錄成功
login_action(d=self.d,username='test',password='test123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#wp-admin-bar-my-account').text
if 'test' in login_msg:
print('登錄成功用例:pass')
else:
print('登錄成功用例:fail')
~~~
> ### 斷言
斷言 (判斷實際結果與預期結果是否相符)
| 斷言方式 | 作用 |
| --- | --- |
| self.assertIn(a,b) | 判斷 a 是不是 in b |
| self.assertNotIn(a,b) | 判斷 a 是不是 not in b |
| self.assertEqual(a,b) | 判斷 a 是不是 等于 b |
| self.assertNotEqual(a,b) | 判斷 a 是不是 不等于 b |
~~~
from selenium import webdriver
from time import sleep
import unittest
def login_action(d,username,password):
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys(username)
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys(password)
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
#同一個類下,如果該方法的變量想要能夠被其他方法所使用,則在定義變量時,加上一個self.
class mytest(unittest.TestCase):
def setUp(self):
self.d = webdriver.Chrome()
self.d.maximize_window()
self.d.implicitly_wait(10)
def tearDown(self):
self.d.close()
self.d.quit()
def test_login_success(self):
# 登錄成功
login_action(d=self.d,username='test',password='test123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#wp-admin-bar-my-account').text
self.assertIn('test',login_msg)
def test_login_username_empty(self):
#用戶名為空密碼正確填寫,登錄失敗
login_action(d=self.d,username='',password='test123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('用戶名一欄為空',login_msg)
def test_login_password_empty(self):
# 密碼為空
login_action(d=self.d,username='test',password='')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('密碼一欄為空',login_msg)
def test_login_password_error(self):
# 用戶名正確密碼錯誤時,登錄失敗
login_action(d=self.d,username='test',password='te124st123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('密碼不正確',login_msg)
if __name__ == '__main__':
unittest.main()
~~~
> ### 封裝到public中
如果當前腳本的函數,需要被其他腳本所引用,那么我們就需要創建一個public來存放這些共用的函數.模塊
比如將登陸的login\_action函數封裝到public中
1、在testcase文件夾下創建一個`public.py`的文件

2、將login\_case.py中的登錄函數移動到public.py上

3、 修改login\_case.py的調用方式

修改后的`login_case.py`代碼如下
~~~
from selenium import webdriver
from time import sleep
import unittest
from public import login_action
#同一個類下,如果該方法的變量想要能夠被其他方法所使用,則在定義變量時,加上一個self.
class mytest(unittest.TestCase):
def setUp(self):
self.d = webdriver.Chrome()
self.d.maximize_window()
self.d.implicitly_wait(10)
def tearDown(self):
self.d.close()
self.d.quit()
def test_login_success(self):
# 登錄成功
login_action(d=self.d,username='test',password='test123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#wp-admin-bar-my-account').text
self.assertIn('test',login_msg)
def test_login_username_empty(self):
#用戶名為空密碼正確填寫,登錄失敗
login_action(d=self.d,username='',password='test123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('用戶名一欄為空',login_msg)
def test_login_password_empty(self):
# 密碼為空
login_action(d=self.d,username='test',password='')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('密碼一欄為空',login_msg)
def test_login_password_error(self):
# 用戶名正確密碼錯誤時,登錄失敗
login_action(d=self.d,username='test',password='te124st123')# 調用登錄函數
login_msg = self.d.find_element_by_css_selector('#login_error').text
self.assertIn('密碼不正確',login_msg)
if __name__ == '__main__':
unittest.main()
~~~
修改后的`public.py`代碼如下
~~~
from time import sleep
def login_action(d,username,password):
d.get('http://os-201804081018/blog/wp-login.php')
d.find_element_by_css_selector('#user_login').send_keys(username)
sleep(1)
d.find_element_by_css_selector('#user_pass').send_keys(password)
sleep(1)
d.find_element_by_css_selector('#wp-submit').click()
sleep(1)
~~~
- 總章
- Oracle數據庫
- 常見的Linux命令
- 理論內容整理
- 給你如下功能怎么測試
- 支付怎么測試
- 購物車怎么測試?
- 搜索功能怎么測試?
- 文件上傳功能怎么測試?
- 登錄功能怎么測試?
- 還款功能怎么測試?
- 訂單功能怎么測試?
- 自動化測試篇
- 必記代碼
- 接口測試篇
- 性能測試篇
- app測試篇
- 面試篇
- 項目篇
- 職業素養篇
- 真實案列分析
- 如何預防冷場
- redis
- 琪琪
- 禪道搭建手冊
- 禪道搭建手冊1
- 禪道的基本使用
- 基于Python3_Selenium的自動化
- Python3安裝
- Python3基礎
- 列表_元組_集合
- 函數_模塊_類
- Python代碼
- selenium環境
- selenium定位方式
- Selenium常見操作
- toast讀取代碼
- 添加用戶代碼
- 隱式等待與顯式等待
- 循環添加用戶
- 測試用例練習
- 測試用例優化
- Fiddler抓包工具
- 安裝
- Fiddler使用
- 接口測試
- Jmeter的安裝
- Jmeter使用
- jmeter+ant+jenkins接口自動化測試框架
- 接口安全測試
- 性能測試
- Nmon監控LInux系統
- Jmeter分布式
- 性能測試-具體案例
- Monkey
- 安裝1
- Monkey使用
- appium自動化
- appium的安裝
- appium基本使用
- 真機USB連接
- 問題排查
- Jenkins持續集成
- Jenkins安裝
- Jenkins配置任務
- Python擴展內容
- Python連接數據庫
- Python進行接口測試
- 開啟服務