在面試的時候可能要你回答自動化框架的搭建的問題, 當你說會的時候, 可能卻答不上來就尷尬了 。
config
report
test case
logdata
common_method
其中 common_method 是核心 ,提供了共同的方法 讓上邊的 東西能協調起來
以下就只介紹這個:
class config:
def __init__(self, config=config_file):
self.config = yamlreader(config).data
# 返回config 檔案的資料
def get(self, element, index=0):
"""yaml是可以通過'---'分節的。用yamlreader讀取返回的是乙個list,第一項是預設的節,如果有多個節,可以傳入index來獲取。
這樣我們其實可以把框架相關的配置放在預設節,其他的關於專案的配置放在其他節中。可以在框架中實現多個專案的測試。
"""return self.config[index].get(element)
#按照 index 層級 找到 key value
我們用到乙個庫是 jmespath ,提供了乙個 search 方法 提取json資料,
json 資料轉化為dict 的方法是 json.loads(body)
import json
import jmespath
class jmespathextractor(object):
"""用jmespath實現的抽取器,對於json格式資料實現簡單方式的抽取。
# ,# "city": "北京",
# "aqi": "91",
# "forecast": [
# ,
# ,
# ,
# ,
#
# ],
# "ganmao": "各項氣象條件適宜,無明顯降溫過程,發生感冒機率較低。", "wendu": "25"
# },
# "status": 1000,
# "desc": "ok"}
j = jmespathextractor()
j_1 = j.extract(query='data.forecast[1].date', body=res.text)
j_2 = j.extract(query='data.ganmao', body=res.text)
print(j_1, j_2)
在介面測試時候為了造資料而造資料是很麻煩,不小心就重複了, 為了 解決這個問題 封裝一些方法。
1)當我們想隨機抽乙個在自己提供的乙個list, 可以這樣封裝 :
def factory_choice_generator(values):
""" 返回乙個生成器函式,呼叫這個函式產生生成器,從給定的list中隨機取一項。 """
def choice_generator():
my_list = list(values)
# rand = random.random()
while true:
yield random.choice(my_list)
#隨機選擇乙個
return choice_generator
2)當我們想要個隨機的字串, 可以這麼寫,
def random_str(min_chars=0, max_chars=8):
"""長度在最大值與最小值之間的隨機字串"""
return fake.pystr(min_chars=min_chars, max_chars=max_chars)
3)當我們想要個隨機的手機號, 位址, email 都可以用 fake 庫來實現 ,
import random
from faker import factory
fake = factory().create('zh_cn')
def random_phone_number():
"""隨機手機號"""
return fake.phone_number()
def random_name():
"""隨機姓名"""
return fake.name()
def random_address():
"""隨機位址"""
return fake.address()
def random_email():
"""隨機email"""
return fake.email()
用到了logging 庫 和 from logging.handlers import timedrotatingfilehandler
**如下:
import os
import logging
from logging.handlers import timedrotatingfilehandler
from utils.config import log_path
class logger(object):
def __init__(self, logger_name='framework'):
self.logger = logging.getlogger(logger_name)
logging.root.setlevel(logging.notset)
self.log_file_name = 'test.log'
self.backup_count = 5
# 日誌輸出級別
self.console_output_level = 'warning'
self.file_output_level = 'debug'
# 日誌輸出格式
self.formatter = logging.formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
def get_logger(self):
"""在logger中新增日誌控制代碼並返回,如果logger已有控制代碼,則直接返回"""
if not self.logger.handlers: # 避免重複日誌
console_handler = logging.streamhandler()
console_handler.setformatter(self.formatter)
console_handler.setlevel(self.console_output_level)
self.logger.addhandler(console_handler)
# 每天重新建立乙個日誌檔案,最多保留backup_count份
file_handler = timedrotatingfilehandler(filename=os.path.join(log_path, self.log_file_name),
when='d',
interval=1,
backupcount=self.backup_count,
delay=true,
encoding='utf-8'
)file_handler.setformatter(self.formatter)
file_handler.setlevel(self.file_output_level)
self.logger.addhandler(file_handler)
return self.logger
logger = logger().get_logger()
report = report_path + '\\測試報告.html'
test_suite = unittest.defaulttestloader.discover('.', pattern='test*.py')
result = beautifulreport(test_suite)
result.report(filename='測試報告', description='測試deafult報告', log_path=report_path)
自動化測試面試題
4 contains text,登入 是什麼意思 答這是xpath查詢登入按鈕的0分,這是查包含登入關鍵字的所有元素加1分 5 自動化遇到用例fail掉如何排查故障 答 不明白你說的什麼意思0分,沒看出錯log的0分,如果能按層次說清楚排查失敗 手工查應用是否真的有bug,確認不是bug,是不是新版...
自動化測試面試題目
linux linux中如何實現分割槽 a.建立以根目錄為掛在點的分割槽 選中空閒區,點選建立,選擇標準分割槽,點選建立。掛在點選擇 檔案型別選擇ext4 勾選使用全部可用空間,點選確定 b.建立swap分割槽 選中空閒區,點選建立,選擇標準分割槽,點選建立。檔案型別選擇swap交換 大小控制為記憶...
python自動化測試面試題
零基礎轉行測試 631450326第一階段 1 列表與元組的區別 2 http的請求流程是怎麼樣的 3 你怎麼理解token,cookie,session 4 怎麼獲取token,中間會使用到那些思路 5 如果乙個介面存在引數的關聯,怎麼解決,如何實現的 6 乙個ui的定位存在iframe框架,怎麼...