SlideShare une entreprise Scribd logo
1  sur  73
Télécharger pour lire hors ligne
JAVASCRIPT-QA-TOOLS




Tuesday, October 16, 12
Tuesday, October 16, 12
WER BIN ICH?


    • Sebastian           Springer

    • 29

    • Dipl. Inf. (FH)

    • Teamleiter           @ Mayflower



Tuesday, October 16, 12
WAS ERZÄHLE ICH HEUTE?


    • Was            bringt mir eine hohe Qualität überhaupt?

    • Welche Tools           kann ich nutzen?

    • Wie            kann ich die QA automatisieren?




Tuesday, October 16, 12
LET’S GO




Tuesday, October 16, 12
WARUM
                    QUALITÄTSSICHERUNG?



Tuesday, October 16, 12
JAVASCRIPT === QUICK & DIRTY




Tuesday, October 16, 12
JAVASCRIPT === QUICK & DIRTY


    • Leichtgewichtig

    • Schnelle              Ergebnisse

    • Direkt              in HTML eingebettet

    • (Fast)              überall verfügbar



Tuesday, October 16, 12
langfristig

JAVASCRIPT === QUICK & DIRTY




Tuesday, October 16, 12
UND WAS IST JETZT
                             QUALITÄT?



Tuesday, October 16, 12
WAS IST QUALITÄT?

    • Reliability

    • Efficiency

    • Security

    • Maintainability

    • Size



Tuesday, October 16, 12
8                 Qualitätssicherung als
                kontinuierlicher Prozess

Tuesday, October 16, 12
Continuous Inspection



Tuesday, October 16, 12
Continuous Integration



Tuesday, October 16, 12
QA IM KLEINEN - DIE IDE




Tuesday, October 16, 12
IDE - EINSTELLUNGEN




Tuesday, October 16, 12
QA IM GROßEN - JENKINS




Tuesday, October 16, 12
JENKINS - KONFIGURATION


    • Build Targets           mit Apache Ant

    • Build.xml

    • Build           Steps

    • Visualisierung          über Plugins



Tuesday, October 16, 12
JENKINS KONFIGURATION




Tuesday, October 16, 12
JENKINS - KONFIGURATION


    • Projektkonfiguration
        /var/lib/jenkins/jobs/<Projekt>/config.xml

    • Ant-Konfiguration
        /var/lib/jenkins/jobs/<Projekt>/workspace/build.xml




Tuesday, October 16, 12
UND WOZU DAS GANZE?




Tuesday, October 16, 12
Schnelle Rückmeldung



Tuesday, October 16, 12
BEISPIEL: DATE CALC




Tuesday, October 16, 12
BEISPIEL: DATE CALC




Tuesday, October 16, 12
BEISPIEL: DATE CALC
                                         Datum eingeben




Tuesday, October 16, 12
BEISPIEL: DATE CALC
                                         Offfset eingeben




Tuesday, October 16, 12
BEISPIEL: DATE CALC




                                       Datum berechnen
                                            lassen


Tuesday, October 16, 12
BEISPIEL: DATE CALC


                              Feiertage beachten!




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
WIE?




Tuesday, October 16, 12
Toolunterstützung &
                            Automatisierung


Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
JSLINT




Tuesday, October 16, 12
JSLINT?
                          ANYONE?



Tuesday, October 16, 12
IT WILL HURT YOUR FEELINGS




Tuesday, October 16, 12
WAS TUT JSLINT?
    • Codingstyle               - Whitespaces

    • ==          und != vs. === und !==

    • Variablendeklaration              zu Beginn einer Funktion

    • “use           strict”

    • Keine               Globale Variablen

    • Definition               vor Verwendung

    • eval          is EVIL
Tuesday, October 16, 12
JSLINT IN DER IDE




Tuesday, October 16, 12
JSLINT IN JENKINS
<target name="jslint">
    <apply executable="java" output="${basedir}/build/
                                      jslint/jslint.xml">
        <arg value="-jar" />
        <arg value="/opt/jslint4java/jslint4java.jar" />
        <arg value="--report" />
        <arg value="xml" />
        <fileset dir="${basedir}/source">
             <patternset>
                 <include name="**/*.js" />
             </patternset>
        </fileset>
    </apply>
</target>

Tuesday, October 16, 12
JSLINT IN JENKINS



    • Plugin: Violations        Plugin

    • Post-build          action: Report Violations




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
COPY AND PASTE
                            DETECTION



Tuesday, October 16, 12
WAS MACHT CPD?



    • Duplikate             im Quellcode finden

    • Tokens              statt Strings




Tuesday, October 16, 12
WARUM CPD?


    • Verbesserungen             an mehreren Stellen

    • Bugfixes             an mehreren Stellen




Tuesday, October 16, 12
WARUM CPD?


    • Verbesserungen             an mehreren Stellen

    • Bugfixes             an mehreren Stellen




                  = erhöhter Wartungsaufwand
Tuesday, October 16, 12
CPD IN DER IDE




Tuesday, October 16, 12
CPD IN DER IDE




Tuesday, October 16, 12
CPD IN JENKINS
  <target name="jscpd">
      <exec executable="/opt/PMD/pmd-bin-5.0.0/bin/run.sh">
          <arg value="cpd" />
          <arg value="--minimum-tokens" />
          <arg value="5" />
          <arg value="--files" />
          <arg value="source" />
          <arg value="--language" />
          <arg value="ecmascript" />
          <arg value="--format" />
          <arg value="xmls" />
          <arg value="build/jscpd/jscpd.xml" />
      </exec>
  </target>


Tuesday, October 16, 12
CPD IN JENKINS



    • Plugin: Duplicate         Code Scanner Plug-in

    • Post-build          action: Publish duplicate code analysis results




Tuesday, October 16, 12
CPD IN JENKINS



    • Plugin: Violations        Plugin

    • Post-build          action: Report Violations




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
UNITTESTS




Tuesday, October 16, 12
WARUM UNITTESTS?


    • Stabilität

    • Sicherheit          für Developer

    • Dokumentation

    • Pro          Bug ein Test



Tuesday, October 16, 12
JASMINE

         describe("DateCalc", function () {
             it("should return...", function () {
                 var dateCalc = new DateCalc(),
                        result = dateCalc.resolveDate();
                    expect(result).toBeFalsy();
             });
         });




Tuesday, October 16, 12
JSTESTDRIVER


    • Testing             Framework

    • Browser              Capturing

    • Coverage

    • Plugins             für andere Frameworks (qUnit, Jasmine, etc.)



Tuesday, October 16, 12
JASMINE IN JENKINS
                          java -jar JsTestDriver.jar --port 9876




Tuesday, October 16, 12
JASMINE IN JENKINS
       <target name="jasmine">
         <exec executable="java">
           <arg value="-jar" />
           <arg value="/opt/jstestdriver/
       JsTestDriver-1.3.5.jar" />
           <arg value="--config" />
           <arg value="${basedir}/source/
       DateCalcJenkins.jstd" />
           <arg value="--tests" />
           <arg value="all" />
           <arg value="--testOutput" />
           <arg value="${basedir}/build/jstestdriver" />
         </exec>
       </target>

Tuesday, October 16, 12
JASMINE IN JENKINS



    • Plugin: xUnit         Plugin

    • Post-build          action: Publish xUnit test result report




Tuesday, October 16, 12
COVERAGE



    • Voraussetzung       #1: JsTestDriver Coverage Plugin

    • Voraussetzung       #2: Lcov to Cobertura Converter




Tuesday, October 16, 12
COVERAGE

<target name="coverage">
  <exec executable="/opt/jstestdriver/lcov_cobertura.py">
    <arg value="${basedir}/build/jstestdriver/
                jsTestDriver.conf-coverage.dat" />
    <arg value="-o" />
    <arg value="${basedir}/build/jstestdriver/coverage.xml" /
  </exec>
</target>




Tuesday, October 16, 12
COVERAGE



    • Plugin: Cobertura          Plugin

    • Post-build          action: Publish Cobertura Coverage Report




Tuesday, October 16, 12
CONFIG.JSTD
server: http://localhost:9876

load:
  - lib/jasmine-1.2.0.rc3/jasmine.js
  - lib/jasmine-jstd-adapter/src/JasmineAdapter.js
  - spec/DateCalc.js
  - spec/Holiday.js
  - src/DateCalc.js
  - src/Holiday.js

plugin:
 - name: "coverage"
   jar: "/opt/JsTestDriver/plugins/coverage.jar"
   module: "com.google.jstestdriver.coverage.CoverageM

Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
JASMINE IN DER IDE




Tuesday, October 16, 12
CODE-ANFORDERUNGEN


    • JSLinted

    • Kein           Copy/Paste Code

    • Unittests

    • Akzeptanztests




Tuesday, October 16, 12
AKZEPTANZTESTS




Tuesday, October 16, 12
WARUM AKZEPTANZTESTS?


    • Tests               gegen Akzeptanzkriterien

    • Anforderungen                vs. Umsetzung

    • Nicht               von Entwicklern




Tuesday, October 16, 12
SELENIUM IDE




Tuesday, October 16, 12
SELENIUM IN JENKINS
<target name=”selenium”>
  <exec executable=”java” output=”${basedir}/build/
selenium/results.html>
    <arg value=”-jar” />
    <arg value=”/opt/selenium/selenium-server.jar” />
    <arg value=”-htmlSuite” />
    <arg value=”*firefox” />
    <arg value=”http://datecalc.basti.dev” />
    <arg value=”/srv/www/vhosts/datecalc/tests/
suite.html” />
  </exec>
</target>



Tuesday, October 16, 12
SELENIUM IN JENKINS



    • Plugin: Selenium          HTML report Plugin

    • Post-build           action: Publish Selenium HTML Report




Tuesday, October 16, 12
CHUCK NORRIS PLUGIN




Tuesday, October 16, 12
FRAGEN?




Tuesday, October 16, 12
KONTAKT
                          Sebastian Springer
                          sebastian.springer@mayflower.de

                          Mayflower GmbH
                          Mannhardtstr. 6
                          80538 München
                          Deutschland

                          @basti_springer

                          https://github.com/sspringer82



Tuesday, October 16, 12

Contenu connexe

Tendances

Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1Troy Miles
 
Maintaining Your Tests At Scale
Maintaining Your Tests At ScaleMaintaining Your Tests At Scale
Maintaining Your Tests At ScaleTrent Willis
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016Gavin Pickin
 
Scala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGSScala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGSChris Birchall
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorialoscon2007
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Demi Ben-Ari
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Libraryjeresig
 
Implementing quality in Java projects
Implementing quality in Java projectsImplementing quality in Java projects
Implementing quality in Java projectsVincent Massol
 

Tendances (8)

Enterprise javascriptsession1
Enterprise javascriptsession1Enterprise javascriptsession1
Enterprise javascriptsession1
 
Maintaining Your Tests At Scale
Maintaining Your Tests At ScaleMaintaining Your Tests At Scale
Maintaining Your Tests At Scale
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
 
Scala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGSScala.js & friends: SCALA ALL THE THINGS
Scala.js & friends: SCALA ALL THE THINGS
 
Ajax Tutorial
Ajax TutorialAjax Tutorial
Ajax Tutorial
 
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
Monitoring Big Data Systems Done "The Simple Way" - Codemotion Milan 2017 - D...
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Library
 
Implementing quality in Java projects
Implementing quality in Java projectsImplementing quality in Java projects
Implementing quality in Java projects
 

En vedette

Open Educational Resources in Higher education
Open Educational Resources in Higher education Open Educational Resources in Higher education
Open Educational Resources in Higher education Ulf-Daniel Ehlers
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Christian Wenz
 
Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)Tine Nowak
 
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...Ulf-Daniel Ehlers
 
Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"Ulf-Daniel Ehlers
 
Weblogs im Museum
Weblogs im MuseumWeblogs im Museum
Weblogs im MuseumTine Nowak
 
E-Learning im Museum
E-Learning im MuseumE-Learning im Museum
E-Learning im MuseumTine Nowak
 

En vedette (8)

Open Educational Resources in Higher education
Open Educational Resources in Higher education Open Educational Resources in Higher education
Open Educational Resources in Higher education
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
 
Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)Beschleunigung via Twitter (Input)
Beschleunigung via Twitter (Input)
 
Qualität von MOOCs
Qualität von MOOCsQualität von MOOCs
Qualität von MOOCs
 
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
Qualität von MOOCs - Folien zum GMW Workshop mit Rolf Schulmeister, Claudia B...
 
Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"Quaity of MOOCs - Results of "The MOOC Quality Project"
Quaity of MOOCs - Results of "The MOOC Quality Project"
 
Weblogs im Museum
Weblogs im MuseumWeblogs im Museum
Weblogs im Museum
 
E-Learning im Museum
E-Learning im MuseumE-Learning im Museum
E-Learning im Museum
 

Similaire à JavaScript QA Tools

Continuous Integration for IOS Apps
Continuous Integration for IOS AppsContinuous Integration for IOS Apps
Continuous Integration for IOS AppsAllan Davis
 
Automated tests workshop
Automated tests workshopAutomated tests workshop
Automated tests workshopdrewz lin
 
Creating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance TestsCreating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance TestsJez Humble
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingDigital Natives
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De TestearAlvaro Videla
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP TestingRan Mizrahi
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Enginecoto
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develomentchristkv
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Amazon Web Services
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Amazon Web Services
 
Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?jeremiahdjordan
 
How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017Vladik Khononov
 
Backbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im EinsatzBackbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im EinsatzSebastian Springer
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Yan Cui
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaDataStax Academy
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understandingKhalid Khan
 
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?Dmitri Shiryaev
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisQAware GmbH
 

Similaire à JavaScript QA Tools (20)

Continuous Integration for IOS Apps
Continuous Integration for IOS AppsContinuous Integration for IOS Apps
Continuous Integration for IOS Apps
 
Automated tests workshop
Automated tests workshopAutomated tests workshop
Automated tests workshop
 
Creating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance TestsCreating Maintainable Automated Acceptance Tests
Creating Maintainable Automated Acceptance Tests
 
Ruby meetup 7_years_in_testing
Ruby meetup 7_years_in_testingRuby meetup 7_years_in_testing
Ruby meetup 7_years_in_testing
 
Código Fácil De Testear
Código Fácil De TestearCódigo Fácil De Testear
Código Fácil De Testear
 
How we're building Wercker
How we're building WerckerHow we're building Wercker
How we're building Wercker
 
Intro to PHP Testing
Intro to PHP TestingIntro to PHP Testing
Intro to PHP Testing
 
Las maravillas de Google App Engine
Las maravillas de Google App EngineLas maravillas de Google App Engine
Las maravillas de Google App Engine
 
Lessons from 4 years of driver develoment
Lessons from 4 years of driver develomentLessons from 4 years of driver develoment
Lessons from 4 years of driver develoment
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
 
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
Running Lean and Mean: Designing Cost-efficient Architectures on AWS (ARC313)...
 
Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?Using Apache Cassandra: What is this thing, and how do I use it?
Using Apache Cassandra: What is this thing, and how do I use it?
 
April JavaScript Tools
April JavaScript ToolsApril JavaScript Tools
April JavaScript Tools
 
How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017How to Tame TDD - ISTA 2017
How to Tame TDD - ISTA 2017
 
Backbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im EinsatzBackbone.js, Socket.io und Node.js im Einsatz
Backbone.js, Socket.io und Node.js im Einsatz
 
Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)Serverless in production, an experience report (IWOMM)
Serverless in production, an experience report (IWOMM)
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
 
Grunt understanding
Grunt understandingGrunt understanding
Grunt understanding
 
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?Hadoop:  Big Data Stacks validation w/ iTest  How to tame the elephant?
Hadoop: Big Data Stacks validation w/ iTest How to tame the elephant?
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 

Plus de Sebastian Springer

Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsSebastian Springer
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsSebastian Springer
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceSebastian Springer
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebSebastian Springer
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebSebastian Springer
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJSSebastian Springer
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptSebastian Springer
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtSebastian Springer
 

Plus de Sebastian Springer (20)

Schnelleinstieg in Angular
Schnelleinstieg in AngularSchnelleinstieg in Angular
Schnelleinstieg in Angular
 
Creating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.jsCreating Enterprise Web Applications with Node.js
Creating Enterprise Web Applications with Node.js
 
Divide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.jsDivide and Conquer – Microservices with Node.js
Divide and Conquer – Microservices with Node.js
 
From Zero to Hero – Web Performance
From Zero to Hero – Web PerformanceFrom Zero to Hero – Web Performance
From Zero to Hero – Web Performance
 
Von 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im WebVon 0 auf 100 - Performance im Web
Von 0 auf 100 - Performance im Web
 
A/B Testing mit Node.js
A/B Testing mit Node.jsA/B Testing mit Node.js
A/B Testing mit Node.js
 
Angular2
Angular2Angular2
Angular2
 
Einführung in React
Einführung in ReactEinführung in React
Einführung in React
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
ECMAScript 6 im Produktivbetrieb
ECMAScript 6 im ProduktivbetriebECMAScript 6 im Produktivbetrieb
ECMAScript 6 im Produktivbetrieb
 
Streams in Node.js
Streams in Node.jsStreams in Node.js
Streams in Node.js
 
JavaScript Performance
JavaScript PerformanceJavaScript Performance
JavaScript Performance
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Testing tools
Testing toolsTesting tools
Testing tools
 
Node.js Security
Node.js SecurityNode.js Security
Node.js Security
 
Typescript
TypescriptTypescript
Typescript
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Warum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser machtWarum ECMAScript 6 die Welt ein Stückchen besser macht
Warum ECMAScript 6 die Welt ein Stückchen besser macht
 
Lean Startup mit JavaScript
Lean Startup mit JavaScriptLean Startup mit JavaScript
Lean Startup mit JavaScript
 

Dernier

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Dernier (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

JavaScript QA Tools

  • 3. WER BIN ICH? • Sebastian Springer • 29 • Dipl. Inf. (FH) • Teamleiter @ Mayflower Tuesday, October 16, 12
  • 4. WAS ERZÄHLE ICH HEUTE? • Was bringt mir eine hohe Qualität überhaupt? • Welche Tools kann ich nutzen? • Wie kann ich die QA automatisieren? Tuesday, October 16, 12
  • 6. WARUM QUALITÄTSSICHERUNG? Tuesday, October 16, 12
  • 7. JAVASCRIPT === QUICK & DIRTY Tuesday, October 16, 12
  • 8. JAVASCRIPT === QUICK & DIRTY • Leichtgewichtig • Schnelle Ergebnisse • Direkt in HTML eingebettet • (Fast) überall verfügbar Tuesday, October 16, 12
  • 9. langfristig JAVASCRIPT === QUICK & DIRTY Tuesday, October 16, 12
  • 10. UND WAS IST JETZT QUALITÄT? Tuesday, October 16, 12
  • 11. WAS IST QUALITÄT? • Reliability • Efficiency • Security • Maintainability • Size Tuesday, October 16, 12
  • 12. 8 Qualitätssicherung als kontinuierlicher Prozess Tuesday, October 16, 12
  • 15. QA IM KLEINEN - DIE IDE Tuesday, October 16, 12
  • 17. QA IM GROßEN - JENKINS Tuesday, October 16, 12
  • 18. JENKINS - KONFIGURATION • Build Targets mit Apache Ant • Build.xml • Build Steps • Visualisierung über Plugins Tuesday, October 16, 12
  • 20. JENKINS - KONFIGURATION • Projektkonfiguration /var/lib/jenkins/jobs/<Projekt>/config.xml • Ant-Konfiguration /var/lib/jenkins/jobs/<Projekt>/workspace/build.xml Tuesday, October 16, 12
  • 21. UND WOZU DAS GANZE? Tuesday, October 16, 12
  • 25. BEISPIEL: DATE CALC Datum eingeben Tuesday, October 16, 12
  • 26. BEISPIEL: DATE CALC Offfset eingeben Tuesday, October 16, 12
  • 27. BEISPIEL: DATE CALC Datum berechnen lassen Tuesday, October 16, 12
  • 28. BEISPIEL: DATE CALC Feiertage beachten! Tuesday, October 16, 12
  • 29. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 31. Toolunterstützung & Automatisierung Tuesday, October 16, 12
  • 32. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 34. JSLINT? ANYONE? Tuesday, October 16, 12
  • 35. IT WILL HURT YOUR FEELINGS Tuesday, October 16, 12
  • 36. WAS TUT JSLINT? • Codingstyle - Whitespaces • == und != vs. === und !== • Variablendeklaration zu Beginn einer Funktion • “use strict” • Keine Globale Variablen • Definition vor Verwendung • eval is EVIL Tuesday, October 16, 12
  • 37. JSLINT IN DER IDE Tuesday, October 16, 12
  • 38. JSLINT IN JENKINS <target name="jslint"> <apply executable="java" output="${basedir}/build/ jslint/jslint.xml"> <arg value="-jar" /> <arg value="/opt/jslint4java/jslint4java.jar" /> <arg value="--report" /> <arg value="xml" /> <fileset dir="${basedir}/source"> <patternset> <include name="**/*.js" /> </patternset> </fileset> </apply> </target> Tuesday, October 16, 12
  • 39. JSLINT IN JENKINS • Plugin: Violations Plugin • Post-build action: Report Violations Tuesday, October 16, 12
  • 40. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 41. COPY AND PASTE DETECTION Tuesday, October 16, 12
  • 42. WAS MACHT CPD? • Duplikate im Quellcode finden • Tokens statt Strings Tuesday, October 16, 12
  • 43. WARUM CPD? • Verbesserungen an mehreren Stellen • Bugfixes an mehreren Stellen Tuesday, October 16, 12
  • 44. WARUM CPD? • Verbesserungen an mehreren Stellen • Bugfixes an mehreren Stellen = erhöhter Wartungsaufwand Tuesday, October 16, 12
  • 45. CPD IN DER IDE Tuesday, October 16, 12
  • 46. CPD IN DER IDE Tuesday, October 16, 12
  • 47. CPD IN JENKINS <target name="jscpd"> <exec executable="/opt/PMD/pmd-bin-5.0.0/bin/run.sh"> <arg value="cpd" /> <arg value="--minimum-tokens" /> <arg value="5" /> <arg value="--files" /> <arg value="source" /> <arg value="--language" /> <arg value="ecmascript" /> <arg value="--format" /> <arg value="xmls" /> <arg value="build/jscpd/jscpd.xml" /> </exec> </target> Tuesday, October 16, 12
  • 48. CPD IN JENKINS • Plugin: Duplicate Code Scanner Plug-in • Post-build action: Publish duplicate code analysis results Tuesday, October 16, 12
  • 49. CPD IN JENKINS • Plugin: Violations Plugin • Post-build action: Report Violations Tuesday, October 16, 12
  • 50. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 52. WARUM UNITTESTS? • Stabilität • Sicherheit für Developer • Dokumentation • Pro Bug ein Test Tuesday, October 16, 12
  • 53. JASMINE describe("DateCalc", function () { it("should return...", function () { var dateCalc = new DateCalc(), result = dateCalc.resolveDate(); expect(result).toBeFalsy(); }); }); Tuesday, October 16, 12
  • 54. JSTESTDRIVER • Testing Framework • Browser Capturing • Coverage • Plugins für andere Frameworks (qUnit, Jasmine, etc.) Tuesday, October 16, 12
  • 55. JASMINE IN JENKINS java -jar JsTestDriver.jar --port 9876 Tuesday, October 16, 12
  • 56. JASMINE IN JENKINS <target name="jasmine"> <exec executable="java"> <arg value="-jar" /> <arg value="/opt/jstestdriver/ JsTestDriver-1.3.5.jar" /> <arg value="--config" /> <arg value="${basedir}/source/ DateCalcJenkins.jstd" /> <arg value="--tests" /> <arg value="all" /> <arg value="--testOutput" /> <arg value="${basedir}/build/jstestdriver" /> </exec> </target> Tuesday, October 16, 12
  • 57. JASMINE IN JENKINS • Plugin: xUnit Plugin • Post-build action: Publish xUnit test result report Tuesday, October 16, 12
  • 58. COVERAGE • Voraussetzung #1: JsTestDriver Coverage Plugin • Voraussetzung #2: Lcov to Cobertura Converter Tuesday, October 16, 12
  • 59. COVERAGE <target name="coverage"> <exec executable="/opt/jstestdriver/lcov_cobertura.py"> <arg value="${basedir}/build/jstestdriver/ jsTestDriver.conf-coverage.dat" /> <arg value="-o" /> <arg value="${basedir}/build/jstestdriver/coverage.xml" / </exec> </target> Tuesday, October 16, 12
  • 60. COVERAGE • Plugin: Cobertura Plugin • Post-build action: Publish Cobertura Coverage Report Tuesday, October 16, 12
  • 61. CONFIG.JSTD server: http://localhost:9876 load: - lib/jasmine-1.2.0.rc3/jasmine.js - lib/jasmine-jstd-adapter/src/JasmineAdapter.js - spec/DateCalc.js - spec/Holiday.js - src/DateCalc.js - src/Holiday.js plugin: - name: "coverage" jar: "/opt/JsTestDriver/plugins/coverage.jar" module: "com.google.jstestdriver.coverage.CoverageM Tuesday, October 16, 12
  • 62. JASMINE IN DER IDE Tuesday, October 16, 12
  • 63. JASMINE IN DER IDE Tuesday, October 16, 12
  • 64. JASMINE IN DER IDE Tuesday, October 16, 12
  • 65. CODE-ANFORDERUNGEN • JSLinted • Kein Copy/Paste Code • Unittests • Akzeptanztests Tuesday, October 16, 12
  • 67. WARUM AKZEPTANZTESTS? • Tests gegen Akzeptanzkriterien • Anforderungen vs. Umsetzung • Nicht von Entwicklern Tuesday, October 16, 12
  • 69. SELENIUM IN JENKINS <target name=”selenium”> <exec executable=”java” output=”${basedir}/build/ selenium/results.html> <arg value=”-jar” /> <arg value=”/opt/selenium/selenium-server.jar” /> <arg value=”-htmlSuite” /> <arg value=”*firefox” /> <arg value=”http://datecalc.basti.dev” /> <arg value=”/srv/www/vhosts/datecalc/tests/ suite.html” /> </exec> </target> Tuesday, October 16, 12
  • 70. SELENIUM IN JENKINS • Plugin: Selenium HTML report Plugin • Post-build action: Publish Selenium HTML Report Tuesday, October 16, 12
  • 73. KONTAKT Sebastian Springer sebastian.springer@mayflower.de Mayflower GmbH Mannhardtstr. 6 80538 München Deutschland @basti_springer https://github.com/sspringer82 Tuesday, October 16, 12