关于unitest 添加测试套件后未按照添加顺序执行问题解决方法
刚刚学习了unitest,就编写了个百度登录的自动化测试脚本。
(PS:刚刚学习,还不完善,请见谅。)
import unittest
from selenium import webdriver
from time import ctime,sleep
from HTMLTestRunner import HTMLTestRunner
class baidulogintest(unittest.TestCase):
#用例执行前 打开火狐浏览器 打开百度网址 打开登录页面 清空用户名 密码输入框内容
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.get("https://www.baidu.com")
#等待页面加载,防止页面未加载完毕 出现元素未找到的错误
sleep(2)
self.driver.find_element_by_link_text('登录').click()
sleep(2)
self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click()
sleep(2)
self.driver.find_element_by_id('TANGRAM__PSP_10__userName').clear()
self.driver.find_element_by_id("TANGRAM__PSP_10__password").clear()
#用例1 用户名不输入 密码12346
def test_1_login_nameisnone(self):
self.driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys("")
sleep(1)
self.driver.find_element_by_id("TANGRAM__PSP_10__password").send_keys('123456')
sleep(0.5)
self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click()
#取点击登录后的文本提示信息,作为返回结果进行断言比较
result = self.driver.find_element_by_xpath("//span[@id = 'TANGRAM__PSP_10__error']").text
#print(result)
#断言 期望值提示信息与实际信息
self.assertEqual(result,'请您输入手机/邮箱/用户名s')
def test_2_login_psdisnone(self):
self.driver.find_element_by_id('TANGRAM__PSP_10__userName').send_keys("123456")
sleep(1)
self.driver.find_element_by_id("TANGRAM__PSP_10__password").send_keys('')
sleep(0.5)
self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click()
result = self.driver.find_element_by_xpath("//span[@id = 'TANGRAM__PSP_10__error']").text
print(result)
self.assertEqual('请您输入密码',result,)
def tearDown(self):
self.driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_4__closeBtn"]').click()
self.driver.quit()
if __name__ == '__main__':
suit = unittest.TestSuite()
suit.addTest(baidulogintest("test_2_login_nameisnone"))
suit.addTest(baidulogintest("test_1_login_nameisnone"))
with(open('./result.html', 'wb')) as fp:
runner = HTMLTestRunner(
stream = fp,
title = '百度登录自动化测试报告',
description = '浏览器:Firfox,系统:windows 10'
)
runner.run(suit,rerun = 0 , save_last_run = False)
#unittest.main()
执行时发现,未按照我添加的测试用例的顺序去执行,还是先执行了 :test_1_login_nameisnone 再次执行了:test_2_login_psdisnone 明明不符合我编写的代码的顺序
suit = unittest.TestSuite()
suit.addTest(baidulogintest("test_2_login_psdisnone"))
suit.addTest(baidulogintest("test_1_login_nameisnone"))
with(open('./result.html', 'wb')) as fp:
经过同事的帮忙才发现我运行时的环境是
是在unitest环境下运行的。试了试这个环境的运行时总会按照case的名称的ASCII去执行。
然后将运行环境改为 正常的python 环境(PS:就是不选择 unitest 的环境)再次运行脚本,将会按照测试套件进行执行。
具体修改环境如下
一、首先选中你项目的环境,选中Edit Configurations…:
二、点击新建环境 “+”
三、选中python 环境
四、选择脚本路径,点击apply,OK ,再次运行即可
本人新手,正在学习中,可能是不是会发一些自动化或性能方面的问题或者我用到的解决方法,有的部分还不清楚,只能慢慢去了解,如果有大神发现问题或者对我的解决方法有深入解释,请多多指教。