how run cucumber with jenkins
このチュートリアルでは、キュウリとジェンキンスの統合について説明するための、キュウリとジェンキンスの完全な概要とExcelシートを提供します。 :
このチュートリアルでは、キュウリとジェンキンスおよびExcelシートについて説明します。このチュートリアルがお役に立てば幸いです。
学習内容:
ジェンキンスとキュウリ
テストスクリプトの自動化
次の設定を行う必要があります。
フィーチャーファイル
特徴:
ユーザーとして
システムに新しいクライアントを追加できるようにしたい。
そのクライアントのアカウンティングデータを追加できるようにします。
バックグラウンド:
私がGithubのホームページにいることを考えると。
ユーザー名を「xxxxxxxxxx」、パスワードを「xxxxxxx」と指定した場合。
そして、サインインボタンをクリックします。
@煙
シナリオ: プロファイルの編集。
あなたのプロフィールオプションをクリックします。
プロファイルの編集ボタンをクリックしたとき。
そして、新しい写真をアップロードしました。
次に、新しいプロフィール写真が表示されるはずです。
@Regression @Everytime
シナリオ: 新しい要点を作成します。
あなたの要点オプションをクリックするとします。
ファイル名、説明を提供するとき。
そして、(パブリック要点メソッドの作成)をクリックします。
それから私は新しい要点を見るべきです。
Stepdefファイル
無料でアニメを見るのに最適なアニメサイト
package com.Multi; import cucumber.api.PendingException; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.java.After; import cucumber.api.java.Before; import cucumber.api.java.en.But; import java.util.List; import cucumber.api.PendingException; import cucumber.api.java.it.Data; import cucumber.runtime.ScenarioImpl; import gherkin.formatter.model.Scenario; import gherkin.formatter.model.ScenarioOutline; import cucumber.api.DataTable; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.cli.Main; public class Step2 { static public String sb; static public String sa; static WebDriver driver = null; @Before('@Smoke,@Regression') public void beforeScenario(){ System.out.println('New scenrio begins'); } @After('@Smoke,@Regression') public void afterScenario(){ System.out.println('Scenrio ends'); } @MyAnnotation public static void myanno() { System.out.println('my annot gets executed'); } @Given('^I am on Github home page$') public void i_am_on_Github_home_page(){ String site = 'https://www.github.com/login'; System.setProperty('webdriver.chrome.driver', 'Executables\chromedriver.exe'); driver = new ChromeDriver(); driver.navigate().to(site); //driver.findElement(By.cssSelector('a(contains(@href, 'login'))').click(); // Write code here that turns the phrase above into concrete actions } @When('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2){ driver.findElement(By.cssSelector('input#login_field')).sendKeys(arg1); driver.findElement(By.cssSelector('input#password')).sendKeys(arg2); // Write code here that turns the phrase above into concrete actions } @When('^Click on SignIn button$') public void click_on_SignIn_button(){ driver.findElement(By.cssSelector('input.btn')).click(); // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Profile option$') public void i_click_on_Your_Profile_option(){ driver.findElement(By.xpath('//*(@id='user- links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id='user- links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your profile')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I click on edit profile button$') public void i_click_on_edit_profile_button(){ driver.findElement(By.xpath('//*(@id='js-pjax- container')/div/div(2)/div(1)/a')).click(); // Write code here that turns the phrase above into concrete actions } @When('^Uploaded new picture$') public void uploaded_new_picture() throws InterruptedException{ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload- container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); driver.findElement(By.id('upload-profile- picture')).sendKeys('D://cucumberFinal//multiple//Files//images.jpg'); Thread.sleep(10000); String wh = driver.getWindowHandle(); driver.switchTo().window(wh); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//div(@class='facebox -content')/form/div(3)/button')); Thread.sleep(10000); actions.moveToElement(element); //Thread.sleep(10000); actions.click(); //actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//div(@class='facebox- content')/form/div(3)/button')).click(); Thread.sleep(3000); // Write code here that turns the phrase above into concrete actions } @Then('^I should be seeing new profile picture$') public void i_should_be_seeing_new_profile_picture(){ WebElement s1 = driver.findElement(By.xpath('//*(@class='avatar-upload- container clearfix')/Img')); sb=s1.getAttribute('src'); System.out.println(s1.getAttribute('src')); if(!(sb.equals(sa))) { Assert.assertTrue('File Upload successful', true); } // Write code here that turns the phrase above into concrete actions } @Given('^I click on Your Gists option$') public void i_click_on_Your_Gists_option(){ driver.findElement(By.xpath('//*(@id='user- links')/li(3)/details/summary/img')).click(); List olist = driver.findElements(By.xpath('//*(@id='user- links')/li(3)/details/ul/li/a(@class='dropdown-item')')); for(WebElement o:olist) { if(o.getText().equals('Your Gists')) { o.click(); break; } } // Write code here that turns the phrase above into concrete actions } @When('^I provide filename, description$') public void i_provide_filename_description() throws InterruptedException { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//div(@class='edit container')/div(@id='gists')/input')).sendKeys('Gist1'); Thread.sleep(2000); Actions actions = new Actions(driver); WebElement element = driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1) /div/div/div/div(5)/div/pre/span')); actions.moveToElement(element); actions.click(); actions.sendKeys('GIST1 Description'); actions.build().perform(); // driver.findElement(By.xpath('//*(@id='gists')/div(2)/div/div(2)/div/div(5)/div(1) /div/div/div/div(5)/div/pre/span')).sendKeys('GIST1 Description'); Thread.sleep(2000); } @When('^click on Create public gist method$') public void click_on_Create_public_gist_method() { driver.findElement(By.xpath('//*(@id='new_gist')/div(2)/div(2)/button(1)')).click(); // Write code here that turns the phrase above into concrete actions } @Then('^i should be seeing the new gist$') public void i_should_be_seeing_the_new_gist(){ List glist = driver.findElements(By.xpath('//div(@class='container repohead-details -container')/ul(1)/li(@class='flex-auto')/div/a')); for(WebElement o:glist) { if(o.getText().equals('Gist1')) { System.out.println('Gist created successfully'); } } // Write code here that turns the phrase above into concrete actions } }
TestNGファイル
ランナーファイル
package runner; import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; import cucumber.api.testng.AbstractTestNGCucumberTests; import cucumber.api.SnippetType; @RunWith(Cucumber.class) @CucumberOptions( features='Features', glue='com.Multi', plugin={'html:target/cucumber-html-report', 'json:target/cucumber.json', 'pretty:target/cucumber-pretty.txt','usage:target/cucumber-usage.json', 'junit:target/cucumber-results.xml'}, dryRun = false, strict = true, tags={'@Smoke,@Regression'}, monochrome = true, snippets=SnippetType.CAMELCASE ) public class Runner extends AbstractTestNGCucumberTests{ }
Jenkins構成
アクセス JenkinsのURL 。
に移動 Jenkinsの管理>プラグインの管理 。
次のプラグインをインストールします。
- キュウリテスト結果プラグイン
- きゅうりレポート
- キュウリパフォーマンスプラグイン
すべての依存プラグインが正常にインストールされていることを確認してください。インストールされていない場合、レポートプラグインが機能しない可能性があります。
次に移動します 管理->グローバルツール構成。
をセットする JDKのパス。
をセットする Mavenへのパス。
作成する 新商品 Mavenプロジェクトとして。
Windows10用の最高の無料のYouTubeビデオダウンローダー
ジョブが作成されたら、左側のパネルにある構成リンクをクリックします。
下へスクロール ページ。
pom.xmlのフルパス、目標を「テスト」として設定し、 セーブ 構成。
上記の手順が完了したら、をクリックします 今すぐビルド Mavenプロジェクトの左側のパネルにあるリンク。
ビルドが実行され、対応する tests.xmlファイル (pom.xmlで言及されています)が実行されます。
コンソールに表示される出力は次のとおりです。
コンソール出力
(情報) T E S T S
(情報) ——————————————————-
(情報) TestSuiteを実行しています
新しいシナリオが始まります
ポート27348でChromeDriver2.33.506120(e3e53437346286c0bc2d2dc9aa4915ba81d9023f)を起動しています
ローカル接続のみが許可されます。
log4j:WARNロガーのアペンダーが見つかりませんでした
(org.apache.http.client.protocol.RequestAddCookies)。
log4j:WARNlog4jシステムを正しく初期化してください。
log4j:WARN詳細については、http://logging.apache.org/log4j/1.2/faq.html#noconfigを参照してください。
2017年11月25日12:56:41 PM org.openqa.selenium.remote.ProtocolHandshake createSession
情報:検出された方言:OSS
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
https://avatars3.githubusercontent.com/u/31874017?s=400&u=c41bfae0fa6b9325fb4f209885b51bd02c7d897d&v=4
シナリオ終了
新しいシナリオが始まります
ポート24866でChromeDriver2.33.506120(e3e53437346286c0bc2d2dc9aa4915ba81d9023f)を起動しています
ローカル接続のみが許可されます。
2017年11月25日12:57:45 PM org.openqa.selenium.remote.ProtocolHandshake createSession
情報:検出された方言:OSS
シナリオ終了
2つのシナリオ(2つ合格)
14ステップ(14合格)
2分2.677秒
例pptを使用したブラックボックステスト手法
(情報)テストの実行:1、失敗:0、エラー:0、スキップ:0、経過時間:128.513秒–TestSuiteで
(情報)
(情報)結果:
(情報)
(情報)テストの実行:1、失敗:0、エラー:0、スキップ:0
(情報)
(JENKINS)テスト結果の記録
(情報) —————————————————————————
(情報)成功を築く
(情報) —————————————————————————
(情報)合計時間:02:51分
(情報)終了日:2017-11-25T12:58:45 + 05:30
(情報)最終メモリ:12M / 28M
(情報) —————————————————————————
Jenkinsがデータの収集を終了するのを待っています
(JENKINS) D: cucumberFinal multiple pom.xmlをcom / cucumber.example / 0.0.1-SNAPSHOT /cucumber.example-0.0.1-SNAPSHOT.pomにアーカイブします
チャネルが停止しました
終了:成功
キュウリジェンキンスレポート
キュウリエクセル
テストスクリプトの自動化
次の設定を行う必要があります。
テスト設計戦略:
- 入力パラメータとしてExcelシートの「columnname」を取得する機能を備えたExcelリーダーユーティリティを作成し、その代わりに、その「columnanme」に対してExcelシートの「columnvalue」を提供します。
- いずれかの手順でExcelシートの列名を二重引用符で囲んだフィーチャファイルを作成します。
- 次に、機能ファイルに対応するStepdefファイルを作成し、Excelリーダー(step1で作成)の入力としてパラメーター(機能ファイルの上に二重引用符で囲んだ単語を指定した場合に生成されるarg1、arg2など)を使用します。
- これで、Stepdefファイルへの入力として使用できるExcelシートのcolumnvalueができました。
- 上記の手順で作成した機能ファイルを実行します。
フィーチャーファイル
特徴: 機能のタイトル
このテンプレートを機能ファイルに使用したい
バックグラウンド:
Gmailを使用していて、画面「画面」にアクセスしている場合。
ユーザー名を「ユーザー名」、パスワードを「パスワード」として指定します。
サインインボタンをクリックしてください。
シナリオ: データテーブルから新しいメッセージを作成する
ポップアップ「ポップアップ」にアクセスしているとき。
そして、「宛先」として指定し、「件名」の詳細として件名を指定して、送信ボタンをクリックします。
次に、成功メッセージが表示されます。
Excelファイル
package com.cuexcel; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.google.common.collect.Maps; import gherkin.formatter.model.Row; public class Excel { private static String sheet = 'Sheet1'; private static String worksheet = 'D:\cucumberFinal\cuexcel\Files\tdata.xls'; static HashMap excelinfo = new HashMap(); public static String get(String ColName) throws IOException { FileInputStream fis; int k =0; String ColValue=null; fis = new FileInputStream(worksheet); HSSFWorkbook wb = new HSSFWorkbook(fis); HSSFSheet ws = wb.getSheet(sheet); int rows = ws.getPhysicalNumberOfRows(); HSSFRow HeaderRow = ws.getRow(0); for(Integer i=1;i Stepdefファイル
package com.cuexcel; import java.io.IOException; import java.util.ArrayList; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.interactions.Actions; import cucumber.api.Scenario; import cucumber.api.java.Before; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; import cucumber.api.Scenario; import com.cuexcel.Excel; public class CExcel { static public WebDriver driver; Excel e; @Before public static void callexcel() throws IOException, InterruptedException { System.setProperty('webdriver.chrome.driver', 'Executables/chromedriver.exe'); driver= new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to('https://www.google.com/gmail/about'); } @Given('^I am on Gmail and accessing screen '((^')*)'$') public void i_am_on_Gmail_and_accessing_screen(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions driver.findElement(By.xpath('//nav/div/a(2)')).click(); //arg1=Excel.get().get(0).toString(); System.out.println(e.get(arg1) + ' - is clicked'); Thread.sleep(3000); } @Given('^I specify Username as '((^')*)' and Password as '((^')*)'$') public void i_specify_Username_as_and_Password_as(String arg1, String arg2) throws Throwable { //arg1=Excel.get().get(1).toString(); //arg2=Excel.get().get(2).toString(); driver.findElement(By.xpath('//input(@type='email')')).sendKeys(e.get(arg1). toString()); driver.findElement(By.xpath('//*(@id='identifierNext')/content/span')).click(); Thread.sleep(3000); driver.findElement(By.xpath('//input(@type='password')')). sendKeys (e.get(arg2). toString()); } @When('^Click on SignIn button$') public void click_on_SignIn_button() throws InterruptedException{ driver.findElement(By.xpath('//*(@id='passwordNext')/content/span')).click(); Thread.sleep(5000); } @When('^I am accessing the popup '((^')*)'$') public void i_am_accessing_the_popup(String arg1) throws Throwable { // Write code here that turns the phrase above into concrete actions //arg1=Excel.get().get(3).toString(); driver.findElement(By.xpath('//*(@id=':x4')/div/div')).click(); System.out.println(e.get(arg1) + '- being clicked'); } @When('^I specify to as '((^')*)' and subject as '((^')*)' details and click on submit button$') public void i_specify_to_as_and_subject_as_details_and_click_on_submit_button(String arg1, String arg2) throws Throwable { // Write code here that turns the phrase above into concrete actions String whandle = driver.getWindowHandle(); driver.switchTo().window(whandle); //arg1=Excel.get().get(4).toString(); //arg2=Excel.get().get(5).toString(); driver.findElement(By.xpath('//td(@class='eV')/div(1)/div/textarea')).sendKeys (e.get(arg1)); driver.findElement(By.xpath('//table(@class='aoP aoC bvf')/tbody/tr/td/form/div(3)/input')).sendKeys(e.get(arg2)); driver.findElement(By.xpath('//table(@class='IZ')/tbody/tr/td/div')).click(); Thread.sleep(3000); } @Then('^i should be seeing the success message$') public void i_should_be_seeing_the_success_message() throws Throwable { // Write code here that turns the phrase above into concrete actions WebElement sent = driver.findElement(By.xpath('//*(@id='link_vsm')')); if(sent.isDisplayed()) { System.out.println('Message sent successfully'); } } }
POMファイル
4.0.0 com cuexcel 0.0.1-SNAPSHOT jar cuexcel http://maven.apache.org UTF-8 org.seleniumhq.selenium selenium-java 3.6.0 org.seleniumhq.selenium selenium-chrome-driver 3.6.0 info.cukes cucumber-core 1.2.5 info.cukes cucumber-java 1.2.5 test info.cukes cucumber-junit 1.2.5 test junit junit 4.11 test info.cukes cucumber-testng 1.2.0 info.cukes gherkin 2.12.2 provided log4j log4j 1.2.17 org.apache.poi poi-ooxml 3.9 org.apache.poi poi 3.11-beta3 xml-apis xml-apis 2.0.2 xerces xercesImpl 2.8.0 info.cukes cucumber-jvm-deps 1.0.5 provided net.masterthought cucumber-reporting 3.11.0 org.apache.maven.plugins maven-surefire-plugin 2.18 org.apache.maven.surefire surefire-junit47 2.18
上記の構成が完了したら、機能ファイルを実行するだけです。
観察
Stepdefファイルは、Excelシートからデータを取得し、機能ファイルに記載されているテスト手順を実行します。
これは、Eclipseコンソールで説明したテストケースの実行結果です。

結論
BDDは、すべての利害関係者がテストスクリプトの作成に参加できるようにするため、特に機能ファイルを介して入力を提供できるため、テスト自動化の未来です。
Cucumberは広く使用されているBDDツールであり、テスト自動化にまだ実装されていない多くの統合と機能があります。キュウリに積極的に取り組んでいるいくつかのグループ/コミュニティがあります。
Cucumberに精通している場合は、ほとんどのツールがCucumberと同様に機能するため、市場で入手可能な任意のBDDツールで作業できます。
この詳細なチュートリアルを通じて、Jenkinsを使用したCucumberについて学習したことを願っています。
推奨読書