第一次参加蓝桥杯软件测试赛的同学,往往会被比赛的时间分配问题困扰。我去年参赛时就犯了个典型错误——花了太多时间在功能测试用例编写上,结果自动化测试部分差点没来得及完成。这种时间分配不当的问题在模拟赛中尤为常见,毕竟正式比赛只有3小时,而需要完成的功能测试、自动化测试和单元测试三大板块都很重要。
比赛的基本流程是这样的:首先你会拿到一个包含测试环境、题目要求的压缩包,里面通常是一个待测的Web系统。功能测试部分需要编写20条测试用例和14条缺陷报告;自动化测试则要使用Selenium完成页面操作;单元测试一般采用分支覆盖法。根据我的经验,三大板块的分值占比大约是30%、40%和30%,所以千万不能偏科。
这里分享一个实用的时间分配方案:
去年模拟赛的题目要求使用混合型正交表,很多同学在这里就卡壳了。其实正交实验法没那么可怕,它本质上是通过科学组合减少测试用例数量的方法。比如测试一个登录功能,有用户名、密码、验证码三个因素,每个因素又有多种取值,全组合可能有几十种情况,但用正交表可能只需要十几组。
实际操作时我建议:
举个例子,如果遇到输入框有长度、字符类型、必填三个因素,可以这样设计:
编写20条测试用例听起来很多,但有套路可循。我总结了一个"四象限法":
每条用例建议包含这些要素:
特别注意缺陷报告要包含:
比赛中的自动化测试通常要求使用Page Object设计模式。这个模式的核心思想是将页面元素定位和操作封装成单独的类,好处是代码可维护性强,元素定位变化时只需修改一处。
以新增岗位功能为例,标准的Page类结构应该是这样的:
python复制class AddPostPage:
def __init__(self, driver):
self.driver = driver
self.post_name_input = (By.XPATH, '//*[@id="postName"]')
self.post_code_input = (By.XPATH, '//*[@id="postCode"]')
def input_post_name(self, name):
element = WebDriverWait(self.driver, 10).until(
EC.presence_of_element_located(self.post_name_input))
element.clear()
element.send_keys(name)
几个关键点:
iframe是比赛中最大的坑点之一,我见过太多同学在这里栽跟头。页面可能包含多层iframe,而且有些还是动态生成的。正确的处理流程应该是:
python复制driver.switch_to.default_content()
python复制iframe = driver.find_element(By.XPATH, "//iframe[contains(@id,'layui-layer-iframe')]")
driver.switch_to.frame(iframe)
特别注意:
单元测试通常考察分支覆盖法,这是白盒测试的一种。我总结了一套高效解题步骤:
第一步:理解被测代码
仔细阅读给出的函数,通常是验证手机号、邮箱等格式的。比如去年题目是验证手机号:
python复制def validate_phone(phone):
pattern = r"^1[35678]\d{9}$"
return bool(re.match(pattern, phone))
第二步:画出流程图
第三步:设计测试路径
根据流程图,需要覆盖:
第四步:编写测试用例
python复制class TestPhone(unittest.TestCase):
def test_empty(self):
self.assertFalse(validate_phone(""))
def test_valid(self):
self.assertTrue(validate_phone("13800138000"))
比赛中常考的正则模式包括:
^1[3-9]\d{9}$^\w+@[a-z0-9]+\.[a-z]{2,4}$^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$^[a-zA-Z]\w{5,19}$建议提前准备好这些常见模式的测试用例,比赛时可以直接套用。
去年比赛我最大的教训就是在功能测试部分花了2小时,导致自动化测试仓促完成,单元测试差点没做。后来复盘发现,其实功能测试的用例不需要追求完美,够用就行,而自动化测试和单元测试才是拿分重点。
几个实用建议:
特别提醒自动化测试部分:
单元测试部分要确保: