python3 +セレンは、詳細なテストフレームワークを自動化

背景

より良いテストに自分のスキルを開発するために、反復的変化は、テスト業界やインターネット業界に対処します。自己のpythonと自動テスト。

2017年には...他のテスト作業があるので、訓練タスクを実行する、断続的な自動テストの実行中に、セレンとの接触を開始したが、
事前にあなたのpythonの基本的な構文を学ぶことができることを示唆している(Pythonのチュートリアル)

タスク

自動テストフレームワークを構築し、効果的にもメンテナンスコストを考慮する必要があり、テストの実施を容易にすることができます。

プロセス

それは独学ですので、私の自動化フレームワークは、時期尚早かもしれません。腹を立て。ギャング案内してください〜

一般

含まれるもの:そのようHTMLレポート、ログ処理、電子メール、およびその他の基本的なページオブジェクトとしてクラスの基本的な公共メソッドを、

前記Pageオブジェクト後継者を導くために、実施例の方法を使用した後、各テストページのためにシステムを操作しているパッケージ。これは、メンテナンスがより便利に、複数回呼び出すことができます。

confに

システムパラメータ情報の基本的な構成は、等正しいユーザ情報、単純なログ・レベル、出力位置の一部、メール情報を、URLを含んでいてもよいです

データ

テストするデータドリブン必要または他のテストケースデータのために、同じ試験手順の後、試験データは、文書内で直接変更することができます。一時的にExcelを使用しました。それはまた、CSV、XMLなどの方法を採用することができます

ログ

一時的なログ出力などの出力、htmlreport IMGの出力を記録し、保存します。

テスト

そして、テストケースは、2つのモジュールのテストスイートを含み

その後、ディレクトリを作成することができ、よりPYファイルを書き込む機能がある場合は、テストケースの作成責任テストケース。
テストスイートは、テストスイートは(テストとテストクラスを含む)の需要に必要な試験項目で選択してもよいです
。注:addTest再利用されていない使用のDDTは、別のテストを追加します。 

1

コードセクション

- BasePageクラスで共通

BasePageクラスのクラス():
 グローバルlogG 
 logG LogHandler =()ロガー。
 DEF __init __(自己、ドライバ、URL =なし):
  self.wd =ドライバ
  (5)self.wd.implicitly_wait 
  self.actions = ActionChains(self.wd)
  IF URL:
   self.urlのURL = 
  他:
   self.url = self.server_url_conf()
 方法のいくつかの#ブラウザの動作が
 DEF get_conf_url(セルフ):
		self.wd.get(self.url)
  self.wd.maximize_window()
  logG。デバッグ( "入力しconf_url:" + STR(self.url))
 DEF brower_close(セルフ):
  リターンself.wd.close()
 DEF brower_quit_all(セルフ):
  リターンself.wd.quit()
...だけでなく、リフレッシュ下記、前後など
 
 #測位方法は、ここで採用しBy.xx
 デフfind_web_element(自己、* LOC) :
  self.wd.find_elementの#(* LOC)
  の戻りself.wd.find_element(* LOC)

 オペレーティング#要素
 :DEF(セルフ、LOC、テキスト)TYPE_TEXT 
  リターンself.wd.find_element(* LOC).send_keys(テキスト)
  
 DEF clear_textを(自己、* LOC):
  リターンself.wd.find_element(* LOC).clear()
  
 DEF submit_func(セルフ、* LOC):
  リターンself.wd.find_element(* LOC).submit()

 DEF click_btn(セルフ、* LOC):
  リターンself.wd.find_element(* LOC).click() 
  マウス関連の
 DEFのmouse_move_to_element(セルフ、* LOC):
  elemは= self.find_web_element(* LOC)
  self.actions.move_to_element(ELEM).perform()
...こちらをクリック、ダブルクリック、右クリックする方法です   

 #は、情報行動得る 
 DEFのget_title(セルフ): 
 (自己)get_web_url DEF:
  リターンはself.wd.current_url 
  返すself.wd.title 
 デフget_element_text(自己、* LOC):
  リターンself.find_web_element(* LOC)の.text 

 #元素是否存在真是
 デフcheck_element_isexist(自己、LOC):
  isexist = Falseを
  試してみてください。
   EC.presence_of_element_located(LOC)(self.wd)
   isexist = Trueの
  電子などの例外を除い:
   isexist = Falseの
   logg.debug( 'isexistかどうか:'、exc_info = TRUE)
  isexistを返す
 デフ(自己、LOC、テキスト)check_element_has_text:
		パス#省略
 
 デフcheck_element_isdisplayed(自己、* LOC):
  	パス#省略
  	
 #生成图
 デフ__inser_img(自己、passorfailed、imgname):
  time_loc = time.strftime( "%のM%のD_%のH%のM%S"、time.localtime()) 
  FILE_PATH = os.path.abspath(__ FILE__)
  FILE_PATH = os.path.join(FILE_PATH + "/../../ログ/%S_%s.png "%(imgname、time_loc))
  self.wd.get_screenshot_as_file(FILE_PATH)
  logg.debug( 'insert_%s_img%s'は%(passorfailed、(FILE_PATH)))

 デフinsert_error_img(自己、imgname):
  自己.__ inser_img("エラー」、imgname)
 デフinsert_success_img(自己、imgname):
  自己.__ inser_img( "成功"、imgname)
 デフinsert_debug_img(自己、imgname):
  自己.__ inser_img( "デバッグ"、imgname)


 デフserver_url_conf(自己):
  self.host = readconfig.ReadConfig()。単にgetServer( 'ホスト')
  self.port = readconfig.ReadConfig()。単にgetServer( 'ポート')
  urlvalue =自己。ホスト+ ":" + self.port
ポート
  戻りurlvalue 

__name__ == '__main__'の場合: 
 テスト= BasePageクラス(webdriver.Chrome())
 test.get_conf_url()

ページには、ログインページに共通のオブジェクト

このようなページとしてメソッドの数が含まれています

自分のユーザー名を入力し、パスワード、ログインをクリックしてください

logintestcaseでテスト

直接オブジェクトは、ユーザー名、パスワードを入力し、ログインページを使用して、サインインをクリックします

ポストメンテナンス、要素の変更は唯一のユースケースのためのページオブジェクトコードを変更する必要がある場合は、補正を必要としません

クラスAioLogin(BasePageクラス):
 グローバルlogg 
 。logg = LogHandler()GETLOG()
 username_loc =(By.NAME、 "ユーザ名")
 password_loc =(By.CSS_SELECTOR、 "入力[タイプ= 'パスワード']")
 login_loc =(BY .CLASS_NAME、 "ログイン-BTN")
 login_loc_oem =(By.ID) "提出" 
 check_login_loc =(By.CLASS_NAME、 "エラーチップ")
 の要素= [username_loc、password_loc、login_loc、check_login_loc] 
 log_menu =(By.CSS_SELECTOR 、 "[名= 'ログイン']")
 )logg.debug(要素を
 
 DEF SET_USERNAME(自己、ユーザ名):
  self.clear_text(* self.username_loc)#直接使用BasePageクラス的方法
  self.type_text(self.username_loc、ユーザ名)
  logg.info(「ユーザ名を入力してください。」ユーザーネーム+) 
  SLEEP(0.1)
その他...

logintest

本明細書で使用する場合、データ駆動型のアプローチDDT

DDTインポートデータから、DDT、アンパック

@ddt 
クラスTESTLOGIN(たunittest.TestCase):
 株式会社無料logGに参加
 。logGはLogHandler()GETLOG()= 
 
 @classmethod#クラスのメソッドを、実行は一度だけ起動します。各ユースケースと異なる設定が再度実行される
 :DEF setUpClass(CLS)
  cls.test = aiologinpage.AioLogin(webdriver.Chrome())
  cls.test.get_conf_url() プリント( 'スタートTestSearch')
  
 @classmethod 
 DEF tearDownClassを( CLS): 
  。#1 TESTLOGIN()logg.info( "ブラウワーが終了")
  TESTLOGIN()test.brower_close()。
  パス
 logindata = ReadExcel()のgetValue( 'ログイン')。
 
 @data(* logindata)
 @unpack#がデータの複数のセットは、アンパック必要とするとき
 :DEFのtestcase2(セルフ、ユーザ名は、passwd、結果)
  logg.info(ユーザー名+ "" + passwdの+ "" + STR(結果を)) 
  後者の試験を変更するだけで直接ページオブジェクトのログインself.test.set_username(ユーザー名)#ユースケース、変化にそうでない場合は必要はありませんが
  self.test.set_password(passwdファイル)
  self.test.type_login_btn() 
  ログインアサーションと予想される結果に一貫性がある場合
  self.assertTrue(self.test.check_login_result(結果)、
      %S:MSG =「\ rをlogin_test失敗\ rのユーザー名\ R&LTのpasswd:%S「%(ユーザ名は、passwd))

IF __name__ == '__main__':
 unittest.main()

その他のページ

例えば、私は、ページパケット機器を作成しました

あなたは次の操作を行うことができます前に、私が最初にログインする必要があります

この時点で、あなたは、ログインページオブジェクトを書き込むためのcorrect_login方法でのconfから成功したログインユーザー名とパスワードを取得することができます。

DEF correct_login(自己):
  self.get_conf_url()
  self.userpasswd = self.correct_userpasswd_conf()
  self.set_username(self.userpasswd [0])
  self.set_password(self.userpasswd [1])
  self.type_login_btn()

その後、他のページの初期化時間がcorrect_loginを呼び出して直接ログインすることができます

テストスイートの追加の方法
TestSuiteの方法
#クラス追加
ST1を= unittest.makeSuite(TESTLOGIN)
を用いて別々に複数の実施形態を追加
ST = unittest.TestSuiteインスタンス(マップ(TestClassName、[ 'TestCase1'、 'testcase2']))
ST = unittest.TestSuiteインスタンス(TestClaseeName( 'testcase1'))

1つ以上のテスト#追加
ST2 = unittest.TestSuiteインスタンス()
st2.addTestsを(MAP(TestCaseClassName、[ 'testcase2'、 'TestCase1']))
st2.addTest(TestCaseClassName( 'TestCase1'))
クラス追加
ST2を.addTest(unittest.makeSuite(TestClassName))

TestLoader方法の
発見ディスカバリスクリプト
ST = unittest.TestLoader()。ディスカバリー( "dir_path"、パターン= "*のの.py")

#loadTestFromTestCase加载测试类
ST1 = unittest.TestLoader()。loadTestsFromTestCase(TestLoginCheck)
ST2 = unittest.TestLoader()。loadTestsFromTestCase(TESTLOGIN)
STT = unittest.TestSuiteインスタンス()

おすすめ

転載: www.cnblogs.com/dsjl/p/11275440.html