hello大家好,我是你們的小編!
本商城測試項目采取PO模型和數據分離式架構,采用pytest+selenium+jenkins結合的方式進行腳本編寫與運行,項目架構如下:
1、創建項目名稱:code_shopping,創建所需項目文件
2、在tools層中建立 get_log.py文件,復制以下代碼
? ? ?此為項目日志工具,使用時直接調用即可
import?logging.handlers
from?conftest?import?BASE_PATH
import?os#?新建類
class?GetLog:#?新建一個日志變量__logger?=?None#?新建獲取日志的方法@classmethoddef?get_logger(cls):#?判斷日志器為空if?cls.__logger?is?None:#?獲取日志器cls.__logger?=?logging.getLogger()#?修改默認的級別cls.__logger.setLevel(logging.INFO)log_path?=?BASE_PATH?+?os.sep?+?"result"?+?os.sep+"log"?+?os.sep?+?"AT.log"#?獲取處理器th?=?logging.handlers.TimedRotatingFileHandler(filename=log_path,when="midnight",interval=1,backupCount=3,encoding="utf-8")#?獲取格式器fmt?=?"%(asctime)s%(levelname)s[%(filename)s(%(funcName)s:%(lineno)d)]-%(message)s"fm?=?logging.Formatter(fmt)#?將格式器添加到處理器中th.setFormatter(fm)#?將處理器添加到日志器中cls.__logger.addHandler(th)#?返回日志器return?cls.__loggerif?__name__?==?'__main__':log?=?GetLog.get_logger()log.info("1111")log.error("22222")
3、在scripts中建立 sh_login文件夾和?test_login.py文件
? ? ?開始編寫商城登錄頁面代碼
4、在test_login.py中編寫腳本
? ? ?商城登錄頁面包含:帳號+密碼+滑動驗證碼的混合驗證模式
?????4.1首先將驗證碼的2張圖片下載到本地(注意填寫等待圖片加載時間),通過商城HTML頁面發現圖片經過base64加密,需解碼保存本地
#?獲取圖片的地址
#?sleep(3)
img?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
img2?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))s?=?img.get_attribute("src")
s2?=?img2.get_attribute("src")
#?print(type(s))
#?print(s)
#?使用split()函數將字符串拆分成多個數字
numbers?=?s.split(",")
numbers2?=?s2.split(",")
#?print(numbers)
#?print(type(numbers))
#?獲取圖片的base64加密數據
djd?=?numbers[1]
djd2?=?numbers2[1]
#?輸出提取出的數字
#?print(djd)
#?base64解碼
lk?=?base64.b64decode(djd)
lk2?=?base64.b64decode(djd2)
#?獲取圖片到本地
pic?=?open("re.png",?"wb")
pic2?=?open("can.png",?"wb")
pic.write(lk)
pic2.write(lk2)
pic.close()
pic2.close()
4.2?對圖像進行處理,計算出滑塊的拖動距離(此方法單獨寫在test001.py文件,方便調用)
import?cv2#?對圖像處理
def?handel_img(img):imgGray?=?cv2.cvtColor(img,?cv2.COLOR_RGBA2GRAY)??#?轉灰度圖imgBlur?=?cv2.GaussianBlur(imgGray,?(5,?5),?1)??#?高斯模糊imgCanny?=?cv2.Canny(imgBlur,?60,?60)??#?Canny算子邊緣檢測return?imgCanny#?讀取圖像
def?match(img_jpg_path,?img_png_path):#?讀取圖像img_jpg?=?cv2.imread(img_jpg_path,?cv2.IMREAD_UNCHANGED)img_png?=?cv2.imread(img_png_path,?cv2.IMREAD_UNCHANGED)img?=?handel_img(img_jpg)small_img?=?handel_img(img_png)res_TM_CCOEFF_NORMED?=?cv2.matchTemplate(img,?small_img,?3)value?=?cv2.minMaxLoc(res_TM_CCOEFF_NORMED)value?=?value[3][0]??#?獲取到移動距離return?valueif?__name__?==?'__main__':dd?=?match('./re.png',?'./can.png')print(dd)
4.3?最后模擬鼠標點擊拖動滑塊動作,完成驗證
#?計算要滑動的距離
dd?=?match('./re.png',?'./can.png')
print(dd)
sleep(2)
#?拖動滑塊
#?找到拖動元素
slider?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
#?按住按鈕
ActionChains(driver).click_and_hold(slider).perform()
sleep(1)
#?滑動距離對應距離
ActionChains(driver).move_by_offset(xoffset=dd,?yoffset=0).perform()
sleep(3)
#?放開鼠標
ActionChains(driver).release().perform()
4.4?完成輸入,驗證,登錄進入系統,判斷是否登錄成功
#?判斷是否登錄成功
getshu?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
#?print(getshu)
if?getshu?==?"Hi,歡迎來到lilishop":print("登錄成功")
else:print("登錄失敗")
5、完整代碼如下
from?selenium?import?webdriver
from?time?import?sleep
from?selenium.webdriver.common.by?import?By
import?base64
from?scripts.sh_login.test001?import?match
from?selenium.webdriver?import?ActionChains#?啟動瀏覽器驅動
driver?=?webdriver.Chrome()
#?最大化
driver.maximize_window()
#?輸入商城地址
driver.get("https://pc-b2b2c.pickmall.cn/login")
sleep(1)
#?輸入用戶名和密碼
driver.find_element(By.CSS_SELECTOR,?("[placeholder='用戶名']")).send_keys("ceshi")
sleep(1)
driver.find_element(By.CSS_SELECTOR,?("[placeholder='密碼']")).send_keys("123456")
sleep(1)
#?點擊登錄按鈕
driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[2]/div[3]/div[1]/form[1]/div[3]/div/button')).click()sleep(2)
#?滑動滑塊
#?獲取圖片的地址
#?sleep(3)
img?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[1]'))
img2?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[1]/img[2]'))s?=?img.get_attribute("src")
s2?=?img2.get_attribute("src")
#?print(type(s))
#?print(s)
#?使用split()函數將字符串拆分成多個數字
numbers?=?s.split(",")
numbers2?=?s2.split(",")
#?print(numbers)
#?print(type(numbers))
#?獲取圖片的base64加密數據
djd?=?numbers[1]
djd2?=?numbers2[1]
#?輸出提取出的數字
#?print(djd)
#?base64解碼
lk?=?base64.b64decode(djd)
lk2?=?base64.b64decode(djd2)
#?獲取圖片到本地
pic?=?open("re.png",?"wb")
pic2?=?open("can.png",?"wb")
pic.write(lk)
pic2.write(lk2)
pic.close()
pic2.close()#?計算要滑動的距離
dd?=?match('./re.png',?'./can.png')
print(dd)
sleep(2)
#?拖動滑塊
#?找到拖動元素
slider?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[2]/div[3]/div[2]/span[2]'))
#?按住按鈕
ActionChains(driver).click_and_hold(slider).perform()
sleep(1)
#?滑動距離對應距離
ActionChains(driver).move_by_offset(xoffset=dd,?yoffset=0).perform()
sleep(3)
#?放開鼠標
ActionChains(driver).release().perform()
sleep(5)
#?判斷是否登錄成功
getshu?=?driver.find_element(By.XPATH,?('//*[@id="app"]/div/div[3]/div/ul[1]/ul/li[1]')).text
#?print(getshu)
if?getshu?==?"Hi,歡迎來到lilishop":print("登錄成功")
else:print("登錄失敗")
#?關閉瀏覽器
driver.quit()
6、完成整個登錄過程,成功視頻如下
最后感謝每一個認真閱讀我文章的人,看著粉絲一路的上漲和關注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!?
軟件測試面試文檔
我們學習必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節等一線互聯網大廠最新的面試資料,并且有字節大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。