自動化測試過程救鲤,針對失敗的用例久窟,我們有時候需要保存截圖,或者想要在html測試報告中體現(xiàn)截圖本缠,如何實現(xiàn)呢斥扛?
這里先說說我的思路:利用webdriver下的截圖方法實現(xiàn)自動截圖,然后再對該方法進行封裝
首先丹锹,selenium中的webdriver提供了三種保存截圖的方法
1犹赖、driver.get_screenshot_as_file(filename)
將截圖保存為文件队他,filename為要保存的文件路徑和文件名
2、driver.get_screenshot_as_base64()
將截圖保存為base64編碼格式峻村,供后面html報告中使用
3、driver.get_screenshot_as_png()
將截圖保存為二進制形式锡凝,用到的好像很少
這里我只針對前兩種方法做了實踐粘昨,直接上代碼
方法一:保存為文件
- 截圖方法代碼:
def save_screen_shot_as_file(self,method_name):
'''這是將截圖保存在文件夾中'''
self.img_path =r'C:\Users\PycharmProjects\web自動化\picture'
self.img_name = time.strftime('%Y-%m-%d_%H-%M-%S')+'.png'
self.method_name =method_name
self.driver.get_screenshot_as_file(self.img_path+'\\'+method_name+self.img_name)
- 基類BasePage.py代碼:
#判斷是否登陸成功
def check_login_state(self,*locator):
try:
self.driver.find_element(*locator)
return True
except Exception as e:
print("登陸失敗:%s" % e)
#添加失敗截圖,并保存到一定目錄下
self.test_name = sys._getframe().f_code.co_name #獲取當前調(diào)用函數(shù)的名字
GetScreen(self.driver).save_screen_shot_as_file(self.test_name)
-
執(zhí)行結(jié)果:
方法二:保存為base64編碼格式
- test_login.py代碼如下:
@ddt()
class TestCase(unittest.TestCase):
@classmethod
#初始化類
def setUpClass(cls):
cls.driver = webdriver.Chrome()
print("用例開始執(zhí)行了窜锯!")
cls.driver.get("http://www.xxx.com/")
# 窗口最大化
cls.driver.maximize_window()
# 頁面添加加載等待時間
cls.driver.implicitly_wait(5)
cls.imgs=[]
@classmethod
#釋放資源類
def tearDownClass(cls):
cls.driver.quit()
print("用例執(zhí)行完畢张肾,退出瀏覽器!")
#創(chuàng)建保存圖片方法
def add_img(self):
self.imgs.append(self.driver.get_screenshot_as_base64())
return True
@data(('15800000001','xxxxxx'))
@unpack
def test_1_login(self,username,password):
t = IndexPage(self.driver)
#登陸鏈接
t.to_login()
self.driver.implicitly_wait(3)
#輸入登陸信息登陸
l =LoginPage(self.driver)
l.login_input(username,password)
self.add_img() #保存截圖锚扎,供測試報告使用
- run_case.py文件代碼如下:
class RunSuite():
def run_suite(self):
# 定義讀取測試文件的目錄
test_case_path = r'C:\Users\PycharmProjects\web自動化\TestCase'
# 定義報告存放目錄
report_path = r'C:\Users\PycharmProjects\web自動化\report'
report_file = 'report' + time.strftime("%Y-%m-%d_%H_%M_%S") + '.html'
discover = defaultTestLoader.discover(test_case_path, pattern='test*.py')
with open(report_path + '\\' + report_file, 'wb') as f:
runner = HTMLTestRunner(stream=f, title="網(wǎng)站登陸測試報告", description="登陸用例執(zhí)行結(jié)果", verbosity=1)
runner.run(discover)
if __name__ == '__main__':
run = RunSuite()
run.run_suite()
- 執(zhí)行結(jié)果: