大部分人可能做的是爬蟲和web,資料分析方面的作業,今天分享個在自動化測驗領域python能做什么樣的事情,比如下方,是用python+pytest+allure生成的精美自動化測驗報告,本文僅演示,用例個數較少,具體作業中根據專案來進行撰寫用例,allure測驗報告現在已經非常流行,具體看下方圖,測驗用例個數、通過率、測驗步驟執行程序、描述,都給我們詳細的生成出來,這樣的測驗用例,拿出去給領導匯報,逼格絕對高,


1、環境配置
1、電腦配jdk 1.8+版本,allure所依賴的環境
2、allure , 單獨的包,安裝好后需要配環境變數
3、pytest、allure-pytest、allure-python-commons、selenium這幾個通過pip安裝即可
2、檔案目錄
1、report : 報告最終生成的目錄
2、xml : xml資料檔案,用來生成最終報告(中間產物)
3、20.py 自動化腳本檔案
4、methods.py 用來被呼叫的腳本方法檔案
5、start_script.py 腳本啟動檔案,生成報告

3、start_script.py啟動腳本檔案代碼
主要是通過os.system執行兩個命令,分別生產xml和html最終報告,clean用來清空舊目錄
import os
# file_path 是自動化腳本檔案
file_path = "20.py"
# xmlpth是生成的xml資料檔案,用來生成最終報告
xmlpath = "./xml"
xmlStr = "pytest -s -q {file_path} --alluredir {xmlpath}".format(file_path=file_path, xmlpath=xmlpath)
print("xmlStr",xmlStr)
# 執行命令,生成xml檔案
a = os.system(xmlStr)
# 生成報告,--clean會清除舊檔案
htmlStr = "allure generate {0} -o ./report/ --clean".format(xmlpath)
os.system(htmlStr)
4、20.py自動化測驗腳本檔案
所有的方法均呼叫的methods.py里面
1、setup_class :
類的初始化方法,瀏覽器最大化,不然有些元素找不到
2、teardown_class :
類的銷毀方法,退出驅動
3、teardown:
每個用例方法的銷毀方法,我這里沒用,比如應用場景:服務崩了后用來回傳到首頁,以不影響下個用例的執行
引數傳遞,見后面介紹,用上我直接復制粘貼了一個,代表2個用例,明白流程即可
import allure, os,sys
sys.path.insert(0,r"C:\\Users\\Administrator\\Desktop\\關于網站\\ccc\\爬蟲系統\\go\\allure_test")
from allure_test import methods
class Test_20:
def setup_class(self):
methods.max_window()
def teardown_class(self):
methods.close()
@allure.feature('打開京東')
@allure.story('點擊登陸')
def test_case_15(self):
'''用例名稱京東-登錄-百度-新聞-百度'''
methods.get_url("https://www.jd.com", desc="打開京東")
methods.click("xpath=>//*[contains(text(),'請登錄')]", desc="登陸")
methods.click("xpath=>//*[contains(text(),'賬戶登錄')]", desc="切換賬戶登陸")
methods.send_key("xpath=>//*[@id='loginname']", 188888888, desc="發送賬戶名密碼")
methods.wait(5)
@allure.feature('打開京東')
@allure.story('點擊登陸')
def test_case_16(self):
'''用例名稱京東-登錄-百度-新聞-百度'''
methods.get_url("https://www.jd.com", desc="打開京東")
methods.click("xpath=>//*[contains(text(),'請登錄')]", desc="登陸")
methods.click("xpath=>//*[contains(text(),'賬戶登錄')]", desc="切換賬戶登陸")
methods.send_key("xpath=>//*[@id='loginname']", 188888888, desc="發送賬戶名密碼")
methods.wait(5)
5、methods.py檔案
舉例說明
send_key方法:
1、loc :需要傳入的元素位置,定義規則是xpath=>“",id=>"”,這樣我用split切分=>符號后,就可以獲取元素選取方式和具體xpath路徑或者id名字,例如 xpath=>//[@id=‘loginname’] 切分后,可以得到[“xpath”,"//[@id=‘loginname’] "],供我定位選取元素使用
2、key:需要傳入的值
3、desc:用例步驟描述
4、with allure.step用來記錄步驟生成allure報告
def send_key(loc,key,desc=None):
with allure.step(desc):
try:
getElement(loc).send_keys(Keys.CONTROL,'a')
getElement(loc).send_keys(key)
except Exception as e:
raise e
getElement方法:
供呼叫,需要傳入上面介紹的loc
# 獲取單個頁面元素
def getElement(loc):
try:
by = loc.split("=>")[0]
value = loc.split("=>")[1]
element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
# print(element)
return element
except Exception as e:
raise e
click方法:
對于需要傳入元素位置的,都要傳loc
def click(loc,desc=None):
with allure.step(desc):
try:
print("這里是點擊方法")
getElement(loc).click()
except Exception as e:
raise e
import os
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import allure
byTypeDict = {
"xpath": By.XPATH,
"id": By.ID,
"name": By.NAME,
"class_name": By.CLASS_NAME,
"tag_name": By.TAG_NAME,
"link_text": By.LINK_TEXT,
"partial_link_text": By.PARTIAL_LINK_TEXT,
"css selector" : By.CSS_SELECTOR
}
driver = webdriver.Chrome(executable_path='C:\chrome\chromedriver246.exe')
# 獲取單個頁面元素
def getElement(loc):
try:
by = loc.split("=>")[0]
value = loc.split("=>")[1]
element = WebDriverWait(driver, 10).until(lambda x: x.find_element(by=byTypeDict[by], value=value))
# print(element)
return element
except Exception as e:
raise e
# 獲取一組相同的元素,以串列形式回傳
def getElements(loc):
try:
by = loc.split("=>")[0]
value = loc.split("=>")[1]
elements = WebDriverWait(driver, 5).until(lambda x: x.find_elements(by=byTypeDict[by], value=value))
return elements
except Exception as e:
raise e
def get_url(*args, desc=None):
with allure.step(desc):
try:
driver.get(args[0])
except Exception as e:
raise e
def wait(*args, desc=None):
with allure.step(desc):
try:
time.sleep(args[0])
except Exception as e:
raise e
def max_window(*args, **kwargs):
try:
driver.maximize_window()
except Exception as e:
raise e
def close(desc=None):
with allure.step(desc):
try:
driver.quit()
except Exception as e:
raise e
def click(loc,desc=None):
with allure.step(desc):
try:
print("這里是點擊方法")
getElement(loc).click()
except Exception as e:
raise e
def send_key(loc,key,desc=None):
with allure.step(desc):
try:
getElement(loc).send_keys(Keys.CONTROL,'a')
getElement(loc).send_keys(key)
except Exception as e:
raise e
6、啟動腳本python3 start_script.py
列印腳本執行資訊,有報錯的話也可以看到

7、啟動腳本python3 start_script.py
切換到report目錄下執行,指定報告打開的ip和埠,提示成功后會自動打開網頁,也可以復制下方出現的地址打開(我這里提示http://api.meiduo.site:8083是因為我本機hosts的dns改了,你的hosts檔案沒改的話,不會出現此問題
allure open -h 127.0.0.1 -p 8083 ./

8、其他說明:
1、這是基于web的ui自動化,用的是selenium,后面會出基于app的appium方面的ui自動化文章,其實也實作了另外一種爬蟲進行app資料抓取的功能
2、本文環境要配置正確,不然得不到想要的報告
3、具體作業實戰應用比本文講述的要復雜的多,很多基于jenkins等做批量腳本執行
4、methods.py方法要繼續補充,我這里只是演示用的幾個方法
軟體測驗是IT相關行業中最容易入門的學科~不需要開發人員燒腦的邏輯思維、不需要運維人員24小時的隨時待命,需要的是細心認真的態度和IT相關知識點廣度的了解,每個測驗人員從入行到成為專業大牛的成長路線可劃分為:軟體測驗、自動化測驗、測驗開發工程師 3個階段,

這里有我整理的一些資料,如果你不想再體驗一次自學時找不到資料,沒人解答問題,堅持幾天便放棄的感受的話,可以加我們的軟體測驗交流群 313782132 ,里面有各種軟體測驗資料和技術交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/195293.html
標籤:其他
