Bootstrap

第十五届蓝桥杯(软件测试)模拟赛2期(完结)

前言:自行模拟赛,自己写的,可以一起讨论学习,感觉正式比赛可以先写自动测试和单元测试,这次先写的用例后面自动测试完全没时间写了

老师之前说过会有直播讲解,3月12号吧

一、题目链接

报名,参加考试就可以获得题目啦,这次的题目是一个文件夹,里面把测试环境、题目全都包含了

二、前期准备

去官网下载学生机考试工具,看上一期的吧

三、功能测试

1.正交实验法

这个题目是要用混合型正交表。

2.用例编写20条

3.编写缺陷报告14条

四、自动化测试

add_post_page.py

from selenium.webdriver.common.by import By
from time import sleep
"""

 * Page3-【管理页面】
  * 需实现该页面中如下 5 个方法的操作代码
  *  
 * 1.点击【+新增】元素操作方法
 * 2.表单框输入【岗位名称】的方法
 * 3.表单框输入【岗位编码】的方法
 * 4.表单框输入【显示顺序】的方法
 * 5.点击【确定】按钮的方法
 *
 * 注意1:不要在  Page 页的方法中填写 iframe 的切换代码。
 * 注意2:注意不要改动已经写好的方法名。
 * 
 *
 
"""
class AddPostPage:
    
    def __init__(self, driver):
        self.driver = driver

    
    def click_add_button(self):
        # TODO 请实现点击【+新增】元素操作方法
        self.driver.find_element(By.XPATH, "/html/body/div/div/div[2]/div[1]/div[1]/div[1]/div/a[1]").click()
        sleep(1)
       

    def input_post_name(self, post_name):
        # TODO 请实现表单框输入【岗位名称】的方法
        post_name_input = self.driver.find_element(By.XPATH, '//*[@id="postName"]')
        post_name_input.clear()
        post_name_input.send_keys(post_name)
    def input_post_code(self, post_code):
        # TODO 请实现表单框输入【岗位编码】的方法
        post_code_input = self.driver.find_element(By.XPATH, '//*[@id="postCode"]')
        post_code_input.clear()
        post_code_input.send_keys(post_code)

    
    def input_post_sort(self, post_sort):
        # TODO 请实现表单框输入【显示顺序】的方法
        post_sort_input = self.driver.find_element(By.XPATH, '//*[@id="postSort"]')
        post_sort_input.clear()
        post_sort_input.send_keys(post_sort)

    
    def click_ok_button(self):
        #TODO 请实现点击【确定】按钮的方法
        self.driver.find_element(By.XPATH, '/html/body/div[4]/div[3]/a[1]').click()
        

 post_management_page.py

from selenium.webdriver.common.by import By
from time import sleep
"""

 * Page2-【岗位管理页面】
  * 需实现该页面中如下 7 个方法的操作代码(以下元素位置可参照题目附图)
  *  
 * 1.获取登录后的【蓝桥超管】文本值
 * 2.点击【系统管理】 > 点击【岗位管理】 的菜单路径
 * 3.定位搜索项中的【岗位编码】输入框 ,并输入参数post_code
 * 4.点击【搜索】按钮方法
 * 5.获取搜索结果的【分页显示信息文本值】
 * 6.点击搜索列表【删除】按钮
 * 7.点击【确认】删除的按钮
 
 *  注意1:不要在  Page 页的方法中填写  iframe 的切换代码。
 *  注意2:注意不要改动已经写好的方法名。
 
"""
class PostManagementPage:
    
    def __init__(self, driver):
        self.driver = driver

    def get_username_text(self):
        # TODO 请实现 获取【蓝桥超管】文本值,注意在此方法中添加返回值
        get_username_text = self.driver.find_element(By.XPATH, "/html/body/div/div/div[1]/nav/ul/li[3]/a/span").text
        return get_username_text
    def click_post_manage_path(self):
        # TODO 请依次实现点击【系统管理】 > 点击【岗位管理】 的路径方法
        self.driver.find_element(By.XPATH, "/html/body/div/nav/div[2]/div[1]/ul/li[3]/a/span[1]").click()
        sleep(1)
        self.driver.find_element(By.XPATH, "/html/body/div/nav/div[2]/div[1]/ul/li[3]/ul/li[5]/a").click()
        sleep(1)
    
    def input_post_code_search(self, post_code):
        # TODO 请实现搜索条件【岗位编码】输入框的方法,post_code 为输入参数
        post_code_search_input = self.driver.find_element(By.XPATH, "/html/body/div/div/div[1]/form/div/ul/li[1]/input")
        post_code_search_input.clear()
        post_code_search_input.send_keys(post_code)
    
    def click_search_button(self):
        # TODO 请实现点击【搜索】按钮的方法
        self.driver.find_element(By.XPATH, "/html/body/div/div/div[1]/form/div/ul/li[4]/a[1]").click()
        sleep(1)
        
    def get_page_numberText(self):
        # TODO 请实现 获取【分页显示信息文本值】的操作方法,注意在此方法中添加返回值
        get_page_numberText = self.driver.find_element(By.XPATH, "/html/body/div/div/div[2]/div[1]/div[3]/div[1]/span").text
        return get_page_numberText

    def click_delete_button(self):
        # TODO 请实现点击【删除】按钮的方法
        self.driver.find_element(By.XPATH, "/html/body/div/div/div[2]/div[1]/div[2]/div[2]/table/tbody/tr/td[8]/a[2]").click()
        
        
    def click_ok_button(self):
        # TODO 请实现点击【确认】删除的按钮的方法    
        self.driver.find_element(By.CSS_SELECTOR, ".layui-layer-btn0").click()
        
        

 test_web_case.py

这里85行这里的代码要注意一下,self.driver.switch_to.default_content()#这句一定要写!!!

import unittest
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
from time import sleep
from selenium.webdriver.common.by import By

from cn.lanqiao.web.login_page import LoginPage
from cn.lanqiao.web.post_management_page import PostManagementPage
from cn.lanqiao.web.add_post_page import AddPostPage


"""
 * 请按照操作步骤编写测试用例
 *
 * 用例要求:
 * 1.合理使用元素等待时间。
 * 2.请调用 Page 类中的方法实现操作步骤。
 * 3.合理使用 iframe 切换,iframe 切换的代码填写在此文件中。
 * 4.不要改动已经写好的方法名。
 *

"""

class WebCaseTest(unittest.TestCase):
    
    # 浏览器初始化
    def setUp(self):
        # 设置火狐驱动的路径,该路径不要随意改动
        gecko_path = "C:\\LanQiaoTest\\project\\PythonLanqiaoTest\\driver\\geckodriver.exe"
     
        # 允许跨域访问
        options = webdriver.FirefoxOptions()
        options.set_preference('security.fileuri.strict_origin_policy', False)
        options.set_preference('security.fileuri.origin_policy', '*')
        self.driver = webdriver.Firefox(service=Service(gecko_path), options=options)
        
        # 设置隐式等待 5 秒
        self.driver.implicitly_wait(5)
        
        # 浏览器窗口最大化
        self.driver.maximize_window()
        
        # 填写被测站点地址
        self.driver.get("http://localhost:8090/login")
        

    # 请再此方法中续写测试用例代码
    def test_browser(self):
        # 创建LoginPage对象,供调用该类中的方法实现【登录】的操作代码
        login_page = LoginPage(self.driver)

        # 点击登录账号输入框并输入账户-admin
        login_page.input_login_name("admin")

        # 点击登录密码输入框并输入密码-LQ15Mock2@2004
        login_page.input_login_password("LQ15Mock2@2004")

        # 点击验证码输入框并输入-666
        login_page.input_code("666")

        # 点击登录按钮
        login_page.click_login_button()
        sleep(2)
        
        #  创建PostManagementPage对象
        post_management_page = PostManagementPage(self.driver)
        
        # 创建PostManagementPage对象
        add_post_page = AddPostPage(self.driver)
        
        # TODO 请参照题目中【用例步骤】补全以下代码,调用 3 个Page类中的方法实现。
        #  岗位管理页面
        # 获取登录后的【蓝桥超管】插入断言
        get_text = post_management_page.get_username_text()
        self.assertEqual("蓝桥超管", get_text,msg="正确")
        # 点击【系统管理】菜单  点击【岗位管理】菜单
        post_management_page.click_post_manage_path()
        # 搜索项【岗位编码】输入“ceo”,请注意之后 iframe 的切换
        
        #点击【+新增】按钮 注意此处动态 iframe 的切换
        self.driver.switch_to.frame("iframe6")
        add_post_page.click_add_button()
        #在【岗位名称】输入框中输入“董事长”
        sleep(3)
        self.driver.switch_to.default_content()#这句一定要写!!!
        #div_element = self.driver.find_element(By.XPATH, "div.layui-layer-iframe")
        #div_element = self.driver.find_element(By.XPATH, "//*[@type='iframe']")
        #iframe_element = div_element.find_element(By.CSS_SELECTOR, "iframe")
        #self.driver.switch_to.frame(iframe_element)
        ele = self.driver.find_element(By.XPATH, '//*[contains(@id,"layui-layer-iframe")]')
        self.driver.switch_to.frame(ele)
        sleep(3)
        #add_post_page.input_post_name('董事长')
        add_post_page.input_post_name("董事长")
        #在【岗位编码】输入框中输入“ceo”
        add_post_page.input_post_code("ceo")
        #在【显示顺序】输入框中输入“1”
        add_post_page.input_post_sort('1')
        #点击【确定】按钮,请注意此处 iframe 的切换
        self.driver.switch_to.default_content()
        add_post_page.click_ok_button()
       
       
       
       
       
       
       
       
       
        
    # 浏览器退出
    def tearDown(self):
        if self.driver:
            self.driver.quit()

if __name__ == "__main__":
    unittest.main()  

五、单元测试

还是考的分支覆盖法

这里的pattern = r"^1[35678]\d{9}$" 我的理解是这个电话号码要求1开头,第二位是35678的其中一个,然后跟9为数字,一共11位。

第一步:画出流程图

第二步:把所有路径都列出来

路径输入数据预期结果
1False
2123456False
324123456789False
413123456789True

第三步:写代码--Python

六、总结

功能测试这一块一定要注意时间,不注意时间很容易三个小时都花在这上面,导致自动化和单元测试没时间写,相反这两块分数也很多,尤其是单元测试,好拿分,建议先写。 

 

;