測試基礎筆記第十八天

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 一、web自動化
    • 1.xpath定位
      • 1.屬性定位
      • 2.屬性與邏輯結合
      • 3.屬性和層級結合
    • 2.常見元素定位方法(面試題)
    • 3.常見元素定位失敗原因
    • 4.cookie
      • 1.驗證碼處理方案
      • 2.認識cookie
      • 3.cookie跳過登錄案例
    • 5.pytest
      • 1.pytest介紹及安裝
      • 2.定義用例
      • 3.執行測試用例
        • 1.命令行運行
        • 2.PyTest配置文件運行
        • 3.項目配置文件config.py
      • 4.參數化
      • 5.斷言
      • 6.allure報告


一、web自動化

1.xpath定位

1.屬性定位

  • 說明:利用元素的屬性來進行定位
  • 示例://*[@xalue=‘提交’]
  • 在這里插入圖片描述

#導包
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver
#需求:打開注冊頁面。完成以下操作:
#1). 利用元素的屬性信息精準定位用戶名輸入框,并輸入:admin
#項目地址:http://121.43.169.97:8848/pageA.html
driver = get_driver(“http://121.43.169.97:8848/pageA.html”)
driver.find_element(By.XPATH, “//*[@id=‘userA’]”).send_keys(“admin”)
#退出瀏覽器
quit_driver(driver)

2.屬性與邏輯結合

  • 說明:利用元素的多個屬性來進行定位
  • 示例://input[@value='提交’and@class=‘banana’]\
  • 在這里插入圖片描述

#導包
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver
#需求:打開注冊頁面。完成以下操作:
#1). 利用屬性與邏輯結合在test1輸入框輸入:admin
#項目地址:http://121.43.169.97:8848/pageA.html
driver = get_driver(“http://121.43.169.97:8848/pageA.html”)
driver.find_element(By.XPATH, “//*[@name=‘user’ and
@class=‘login’]”).send_keys(“admin”)
#退出瀏覽器
quit_driver(driver)

3.屬性和層級結合

  • 說明:先定位到其父級元素,然后在找到該元素
  • 示例://div[@id=‘test1’]/input[@value=‘提交’]
  • 在這里插入圖片描述

#導包
from selenium.webdriver.common.by import By
from tools.chromeDriver import get_driver, quit_driver
#需求:打開注冊頁面。完成以下操作:
#1). 利用屬性與邏輯結合在test1輸入框輸入:admin
#項目地址:http://121.43.169.97:8848/pageA.html
driver = get_driver(“http://121.43.169.97:8848/pageA.html”)
#driver.find_element(By.XPATH, “//[@name=‘user’ and
@class=‘login’]").send_keys(“admin”)
driver.find_element(By.XPATH, "//
[@id=‘p1’]/input”).send_keys(“admin”)
#退出瀏覽器
quit_driver(driver)

2.常見元素定位方法(面試題)

在這里插入圖片描述

3.常見元素定位失敗原因

在這里插入圖片描述

4.cookie

1.驗證碼處理方案

  • 去掉驗證碼、萬能驗證碼
  • 驗證碼識別技術
  • 記錄cookie
  • 在這里插入圖片描述

2.認識cookie

在這里插入圖片描述

3.cookie跳過登錄案例

在這里插入圖片描述

  • 需求:使用cookie實現跳過登錄
    1). 手動登錄商城,獲取cookie
    2). 使用獲取到的cookie,達到登錄目的,然后就可以執行登錄之后的操作
    在這里插入圖片描述

#導包
import time
from selenium import webdriver
#打開瀏覽器
driver = webdriver.Chrome()
#打開頁面
driver.get(“https://hmshop-test.itheima.net/Home/User/index.html”)
time.sleep(2)
#繞過登錄
cookie_data = {
“name”: “PHPSESSID”,
“value”: “h0lrprhei3p3v16pr8sb2ehrm3”
}
driver.add_cookie(cookie_data)
time.sleep(2)
driver.refresh() # 刷新
#退出瀏覽器
time.sleep(3)
driver.quit()

5.pytest

1.pytest介紹及安裝

  • pytest:python中的一種單元測試框架。
  • 為什么學習pytest?
    能阻止多個用例去執行
    方便實現參數化
    能夠生成測試報告
  • 安裝
    安裝: pip install pytest
    在這里插入圖片描述
    驗證: pip show pytest
    在這里插入圖片描述

2.定義用例

  • 在這里插入圖片描述

#導包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def setup_class(self):
#打開瀏覽器
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def setup(self):
#打開頁面
self.driver.get(“https://hmshop-test.itheima.net/Home/user/login.html”)
def test_login(self):
#case02:登錄失敗(用戶名為空)
self.driver.find_element(By.ID, “username”).send_keys(“”)
self.driver.find_element(By.ID, “password”).send_keys(“123456”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def test_login2(self):
#case03:登錄失敗(密碼為空)
self.driver.find_element(By.ID, “username”).send_keys(“13488888888”)
self.driver.find_element(By.ID, “password”).send_keys(“”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def test_login3(self):
#case01:登錄成功
self.driver.find_element(By.ID, “username”).send_keys(“13488888888”)
self.driver.find_element(By.ID, “password”).send_keys(“123456”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def teardown(self):
time.sleep(2)
def teardown_class(self):
#退出瀏覽器
time.sleep(3)
self.driver.quit()

3.執行測試用例

1.命令行運行

在這里插入圖片描述
在這里插入圖片描述

#導包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def setup_class(self):
#打開瀏覽器
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def setup_method(self):
#打開頁面
self.driver.get(“https://hmshop-test.itheima.net/Home/user/login.html”)
def test_login(self):
#case02:登錄失敗(用戶名為空)
self.driver.find_element(By.ID, “username”).send_keys(“”)
self.driver.find_element(By.ID, “password”).send_keys(“123456”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def test_login2(self):
#case03:登錄失敗(密碼為空)
self.driver.find_element(By.ID, “username”).send_keys(“13488888888”)
self.driver.find_element(By.ID, “password”).send_keys(“”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def test_login3(self):
#case01:登錄成功
self.driver.find_element(By.ID, “username”).send_keys(“13488888888”)
self.driver.find_element(By.ID, “password”).send_keys(“123456”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def teardown_method(self):
time.sleep(2)
def teardown_class(self):
#退出瀏覽器
time.sleep(3)
self.driver.quit()
在這里插入圖片描述

2.PyTest配置文件運行

在這里插入圖片描述

[pytest]
addopts = -s
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test*

3.項目配置文件config.py
  • 技術點: 參數化(數據驅動)
  • 作用:將測試數據和測試腳本分離,后期代碼維護焦點放在數據
  • 使用:裝飾器@(不改變方法內部的代碼邏輯 新增功能)
    @pytest.mark.parametrize==》循環遍歷測試數據 調用測試腳本
  • 步驟:
    ① 準備測試數據,格式:[(),(),()]
    ② 在被測試方法前面引入裝飾器
    @pytest.mark.parametrize(“保存數據的變量,注意變量個數=(中數據的個數)”, 測試數據)
    def test_login(self, 直接復制裝飾器中保存數據的一組變量名即可):
    pass
    ③ 修改測試方法代碼 引用變量中的數據完成測試

#導包
import time
import config
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
test_data = [
(“”, “123456”, “8888”),
(“13488888888”, “”, “8888”),
(“13488887799”, “123456”, “8888”),
(“13488888888”, “123457”, “8888”),
(“13488888888”, “123456”, “8888”)
]
class TestLogin:
#類前置處理
def setup_class(self):
#打開瀏覽器
service = Service(executable_path=config.BASE_PATH +
‘/chromedriver.exe’)
self.driver = webdriver.Chrome(service=service)
#driver = webdriver.Chrome()
#窗口最大化
self.driver.maximize_window()
#類后置處理
def teardown_class(self):
#退出瀏覽器
self.driver.quit()
#方法前置處理
def setup_method(self):
#打開頁面
self.driver.get(“https://hmshop-
test.itheima.net/index.php/Home/user/login.html”)
#方法后置處理
def teardown_method(self):
#等待3秒
time.sleep(3)
@pytest.mark.parametrize(“username, password, code”, test_data)
def test_login(self, username, password, code):
#頁面定位+操作
self.driver.find_element(By.ID, “username”).send_keys(username)
self.driver.find_element(By.ID, “password”).send_keys(password)
self.driver.find_element(By.ID, “verify_code”).send_keys(code)
self.driver.find_element(By.NAME, “sbtbutton”).click()

4.參數化

  • 說明:通過參數的方式來傳遞數據,從而實現數據和腳本分離。并且可以實現用例的重復執行
  • 在這里插入圖片描述

#導包
import time
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By
test_data = [(“”, “123456”, “8888”),
(“13488888888”, “”, “8888”),
(“13488888888”, “123456”, “8888”)]
class TestLogin:
def setup_class(self):
#打開瀏覽器
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def setup_method(self):
#打開頁面
self.driver.get(“https://hmshop-test.itheima.net/Home/user/login.html”)
@pytest.mark.parametrize(“username, password, code”, test_data)
def test_login(self, username, password, code):
self.driver.find_element(By.ID, “username”).send_keys(username)
self.driver.find_element(By.ID, “password”).send_keys(password)
self.driver.find_element(By.ID, “verify_code”).send_keys(code)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click()
def teardown_method(self):
time.sleep(2)
def teardown_class(self):
#退出瀏覽器
time.sleep(3)
self.driver.quit()

5.斷言

  • 說明:讓程序代替人為判斷測試程序執行結果是否符合預期結果的過程
  • 在這里插入圖片描述
    在這里插入圖片描述
  • 案例:斷言登錄成功后的用戶信息
    在這里插入圖片描述

#導包
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestLogin:
def setup_class(self):
#打開瀏覽器
self.driver = webdriver.Chrome()
self.driver.maximize_window()
def setup_method(self):
#打開頁面
self.driver.get(“https://hmshop-test.itheima.net/Home/user/login.html”)
def test_login(self):
#case01:登錄成功
self.driver.find_element(By.ID, “username”).send_keys(“13488888888”)
self.driver.find_element(By.ID, “password”).send_keys(“123456”)
self.driver.find_element(By.ID, “verify_code”).send_keys(“8888”)
self.driver.find_element(By.LINK_TEXT, “登 錄”).click(
time.sleep(3)
assert “13488888888” == self.driver.find_element(By.CLASS_NAME,
“userinfo”).text
def teardown_method(self):
time.sleep(2)
def teardown_class(self):
#退出瀏覽器
time.sleep(3)
self.driver.quit()

6.allure報告

  • 安裝: pip install allure-pytest
    在這里插入圖片描述
  • 驗證: pip show allure-pytest
    在這里插入圖片描述
  • 下載: https://github.com/allure-framework/allure2/releases
    在這里插入圖片描述
  • 解壓
    在這里插入圖片描述
  • allure配置
    在這里插入圖片描述
  • pytest.ini配置文件

[pytest]
addopts = -s --alluredir report
testpaths = ./scripts
python_files = test*.py
python_classes = Test*
python_functions = test*

  • 生成報告:
    ① 運行測試腳本:pytest
    ② 生成測試報告:allure serve report
    在這里插入圖片描述
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81569.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

(筆記)List

一、List的介紹和使用 1.List的介紹 1.1 list是可以在任意常數范圍內插入和刪除的序列式容器,并且該容器可以前后雙向迭代。 1.2 list底層是雙向鏈表結構,雙向鏈表中每個元素都儲存在互不相關的獨立節點中,在節點中通過指針指向前其前一個…

重載和覆寫有什么區別?

重載(Overload)和覆寫(Override,也叫重寫 )是面向對象編程中的重要概念,它們有以下區別: 定義 - 重載:在同一類中,允許存在多個方法名相同,但參數列表&#x…

flask 獲取各種請求數據:GET form-data x-www-form-urlencoded JSON headers 上傳文件

在 Flask 里,能使用多種方法獲取不同類型的請求數據,下面詳細介紹常見請求數據的獲取方式。 獲取查詢字符串參數(GET 請求) 查詢字符串參數一般在 URL 里,以 ?key1value1&key2value2 這種形式存在。可通過 requ…

人工智能助力工業制造:邁向智能制造的未來

在當今數字化轉型的浪潮中,人工智能(AI)技術正逐漸成為推動工業制造領域變革的核心力量。智能制造作為工業 4.0 的重要組成部分,通過將 AI 技術與傳統制造工藝深度融合,正在重塑整個生產流程,提高生產效率、…

【java八股文】深入淺出synchronized優化原理

🔍 開發者資源導航 🔍🏷? 博客主頁: 個人主頁📚 專欄訂閱: JavaEE全棧專欄 synchronized優化原理 synchronized即使悲觀鎖也是樂觀鎖,擁有自適應性。 jvm內部會統計每個鎖的競爭激烈程度&…

生成式 AI 的重要性

在科技飛速發展的今天,我們正站在一個前所未有的變革節點上。生成式 AI,宛如一顆突然劃破夜空的耀眼流星,以其強大的創造力和無限的可能性,迅速成為全球矚目的焦點。它究竟有何等魔力,能在如此短的時間內引發如此巨大的轟動?這背后又隱藏著怎樣的時代密碼,等待著我們去解…

生成式 AI 的闡釋

在科技浪潮的洶涌推動下,一個全新的時代正以前所未有的速度向我們奔來,生成式 AI 無疑是這股浪潮中最耀眼的浪尖。它究竟是什么?又將如何重塑我們的世界?這不僅是科技愛好者們熱衷探討的話題,更是關乎每一個人未來發展的重要命題。 生成式 AI,從本質上來說,是一種能夠自…

C++ 中 virtual 的作用

文章目錄 1. 用于虛繼承2. 用于抽象基類3. 用于多態 C 的 virtual 關鍵字,常見有 3 種用途:虛繼承、抽象基類和多態。 1. 用于虛繼承 virtual 用于虛繼承時,主要是為了解決菱形繼承中的重復繼承同名成員問題。使用形式如下 class Derived:…

軟件測試52講學習分享:深入理解單元測試

課程背景 最近我在學習極客時間的《軟件測試52講》課程,這是由騰訊TEG基礎架構部T4級專家茹炳晟老師主講的認證課程。作為數字化轉型與人工智能(DTAI)產業人才基地建設中心的認證課程,內容非常專業實用。今天想和大家分享第3講"什么是單元測試&…

Java SE(7)——類和對象(二)

1.包(package) 1.1 包的定義 在Java中,包是一種用于組織和管理類,接口和其他包的機制。主要作用是防止命名沖突,并提供一種訪問控制機制 1.2 package關鍵字 package關鍵字的主要作用是聲明當前類在哪個包里面。 當然,用戶也可以…

Manus聯合創始人:公司產品基于Claude和阿里千問大模型開發

3月11日消息,日前,Manus官方在社交平臺轉發了公司聯合創始人、首席科學家季逸超對Manus的技術解讀,季逸超在評論區回復網友關于“Manus使用了哪一個基礎大模型”這一問題時回復稱,“我們用過Claude,也用過不同版本的Qw…

欺騙單頁應用(SPA)渲染隱藏路由 -- trouble at the spa b01lersCTF

題目信息:I had this million-dollar app idea the other day, but I can’t get my routing to work! I’m only using state-of-the-art tools and frameworks, so that can’t be the problem… right? Can you navigate me to the endpoint of my dreams? 題目…

大數據引領行業革命:深度解析與未來趨勢

??個人主頁??:慌ZHANG-CSDN博客 ????期待您的關注 ???? 在信息化、數字化、智能化日益發展的今天,大數據技術已經成為推動產業變革的重要引擎。它不僅僅是一個技術工具,更是各行各業創新和優化的核心動力。無論是大企業還是初創公司,大數據的應用已經成為提升效…

[machine learning] Transformer - Attention (二)

本文介紹帶訓練參數的self-attention,即在transformer中使用的self-attention。 首先引入三個可訓練的參數矩陣Wq, Wk, Wv,這三個矩陣用來將詞向量投射(project)到query, key, value三個向量上。下面我們再定義幾個變量: import torch inpu…

施磊老師rpc(三)

文章目錄 mprpc框架項目動態庫編譯框架生成動態庫框架初始化函數-文件讀取1. 為什么要傳入 argc, argv2. 讀取參數邏輯3. 配置文件設計 init部分實現 mprpc配置文件加載(一)配置文件加載類成員變量主要方法**src/include/mprpcconfig.h** 配置文件**bin/test.conf** 實現配置文…

文獻分享:通過簡單的生物偶聯策略將肽雙特異性抗體(pBsAbs)應用于免疫治療

背景 雙特異性抗體是將單克隆抗體的兩個不同抗原結合位點融合成一個單一實體的人工分子。它們已經成為一種很有前景的下一代抗癌治療方法。盡管雙特異性抗體的應用令人著迷,但雙特異性抗體的設計和生產仍然繁瑣而富有挑戰性,導致研發過程漫長&#xff0…

二、shell腳本--變量與數據類型

1. 變量的定義與使用 定義變量:簡單直接 在 Shell 里定義變量相當容易: 基本格式: variable_namevalue關鍵點 ?:賦值號 的兩邊絕對不能有空格!這絕對是初學者最容易踩的坑之一 😨,務必留意&#xff01…

java_Lambda表達式

1、背景 lambda表達式是Java SE 8中一個重要的新特性。lambda表達式允許你通過表達式來代替功能接口。lambda表達式就和方法一樣樣,它提供了一個正常的參數列表和一個使用這些參數的主體(body,可以是一個表達式和一個代碼塊)。La…

給QCustomPlot添加一個QScrollBar滾動條、限制縮放范圍、自動設置大小和右邊欄垂直縮放

實現效果 實現思路 從QCustomPlot類派生一個類,進行個性化設置,在軸矩形的上邊設置Margin,放一個滾動條,設置滾動條的樣式 常量定義 #define NQSCRB 1000構造函數初始化 // 設置QScrollBar的樣式// 頂部空--5,左側空--6

實驗-組合電路設計1-全加器和加法器(數字邏輯)

目錄 一、實驗內容 二、實驗步驟 2.1 全加器的設計 2.2 加法器的設計 三、調試過程 3.1 全加器調試過程 2.加法器的調試過程 四、實驗使用環境 五、實驗小結和思考 一、實驗內容 a) 介紹 在這次實驗中,你將熟悉 Logisim 的操作流程,并且學習…