J'utilise des scripts uautomation pour tester mon application iOS. J'ai réussi à faire fonctionner les scripts de la ligne de commande, mais je dois maintenant convertir la sortie (passe / échec) dans un format que Jenkins peut comprendre, idéalement de style Junit. P>
Quelqu'un a-t-il écrit des scripts pour le faire avant d'essayer et d'écrire un? p>
Merci beaucoup P>
4 Réponses :
Peut-être que vous pourrez consulter: https://github.com/shanne/ Jasmine-iOS-Acceptation-tests
EDIT:
J'ai également évité d'utiliser Jasmine. Pour "Écouter" Démarrer, passer et échouer Test, j'ai simplement remplacé uialogger.logstart code>, uialogger.logfail code> et uialogger.logpass code>: < / p>
Salut cela a l'air très cool mais j'essayais d'éviter d'utiliser Jasmine et d'utiliser la Je viens de modifier ma réponse pour vous montrer la solution que j'ai choisie de mettre en œuvre
@kenji Pouvez-vous expliquer un peu comment et où vous utilisez cette fonction?
Je remplace logStart code> avec une fonction anonyme, et cette fonction appelez le journal code> réel code> (après le début de la suite de test de test).
I Bealive Vous trouverez ce dont vous avez besoin ici: https://github.com/shinetech/jenkins-ios-example
Que Vous êtes intéressé par l'appel de script "OCUNIT2JUNIT.RB" P>
Je l'ai utilisé pour un projet, cela fonctionne très bien. P>
#!/usr/bin/ruby
#
# ocunit2junit.rb was written by Christian Hedin <christian.hedin@jayway.com>
# Version: 0.1 - 30/01 2010
# Usage:
# xcodebuild -yoursettings | ocunit2junit.rb
# All output is just passed through to stdout so you don't miss a thing!
# JUnit style XML-report are put in the folder specified below.
#
# Known problems:
# * "Errors" are not cought, only "warnings".
# * It's not possible to click links to failed test in Hudson
# * It's not possible to browse the source code in Hudson
#
# Acknowledgement:
# Big thanks to Steen Lehmann for prettifying this script.
################################################################
# Edit these variables to match your system
#
#
# Where to put the XML-files from your unit tests
TEST_REPORTS_FOLDER = "test-reports"
#
#
# Don't edit below this line
################################################################
require 'time'
require 'FileUtils'
require 'socket'
class ReportParser
attr_reader :exit_code
def initialize(piped_input)
@piped_input = piped_input
@exit_code = 0
FileUtils.rm_rf(TEST_REPORTS_FOLDER)
FileUtils.mkdir(TEST_REPORTS_FOLDER)
parse_input
end
private
def parse_input
@piped_input.each do |piped_row|
puts piped_row
case piped_row
when /Test Suite '(\S+)'.*started at\s+(.*)/
t = Time.parse($2.to_s)
handle_start_test_suite(t)
when /Test Suite '(\S+)'.*finished at\s+(.*)./
t = Time.parse($2.to_s)
handle_end_test_suite($1,t)
when /Test Case '-\[\S+\s+(\S+)\]' started./
test_case = $1
when /Test Case '-\[\S+\s+(\S+)\]' passed \((.*) seconds\)/
test_case = $1
test_case_duration = $2.to_f
handle_test_passed(test_case,test_case_duration)
when /(.*): error: -\[(\S+) (\S+)\] : (.*)/
error_location = $1
test_suite = $2
test_case = $3
error_message = $4
handle_test_error(test_suite,test_case,error_message,error_location)
when /Test Case '-\[\S+ (\S+)\]' failed \((\S+) seconds\)/
test_case = $1
test_case_duration = $2.to_f
handle_test_failed(test_case,test_case_duration)
when /failed with exit code (\d+)/
@exit_code = $1.to_i
when
/BUILD FAILED/
@exit_code = -1;
end
end
end
def handle_start_test_suite(start_time)
@total_failed_test_cases = 0
@total_passed_test_cases = 0
@tests_results = Hash.new # test_case -> duration
@errors = Hash.new # test_case -> error_msg
@ended_current_test_suite = false
@cur_start_time = start_time
end
def handle_end_test_suite(test_name,end_time)
unless @ended_current_test_suite
current_file = File.open("#{TEST_REPORTS_FOLDER}/TEST-#{test_name}.xml", 'w')
host_name = string_to_xml Socket.gethostname
test_name = string_to_xml test_name
test_duration = (end_time - @cur_start_time).to_s
total_tests = @total_failed_test_cases + @total_passed_test_cases
suite_info = '<testsuite errors="0" failures="'+@total_failed_test_cases.to_s+'" hostname="'+host_name+'" name="'+test_name+'" tests="'+total_tests.to_s+'" time="'+test_duration.to_s+'" timestamp="'+end_time.to_s+'">'
current_file << "<?xml version='1.0' encoding='UTF-8' ?>\n"
current_file << suite_info
@tests_results.each do |t|
test_case = string_to_xml t[0]
duration = @tests_results[test_case]
current_file << "<testcase classname='#{test_name}' name='#{test_case}' time='#{duration.to_s}'"
unless @errors[test_case].nil?
# uh oh we got a failure
puts "tests_errors[0]"
puts @errors[test_case][0]
puts "tests_errors[1]"
puts @errors[test_case][1]
message = string_to_xml @errors[test_case][0].to_s
location = string_to_xml @errors[test_case][1].to_s
current_file << ">\n"
current_file << "<failure message='#{message}' type='Failure'>#{location}</failure>\n"
current_file << "</testcase>\n"
else
current_file << " />\n"
end
end
current_file << "</testsuite>\n"
current_file.close
@ended_current_test_suite = true
end
end
def string_to_xml(s)
s.gsub(/&/, '&').gsub(/'/, '"').gsub(/</, '<')
end
def handle_test_passed(test_case,test_case_duration)
@total_passed_test_cases += 1
@tests_results[test_case] = test_case_duration
end
def handle_test_error(test_suite,test_case,error_message,error_location)
# error_message.tr!('<','').tr!('>','')
@errors[test_case] = [ error_message, error_location ]
end
def handle_test_failed(test_case,test_case_duration)
@total_failed_test_cases +=1
@tests_results[test_case] = test_case_duration
end
end
#Main
#piped_input = File.open("tests_fail.txt") # for debugging this script
piped_input = ARGF.read
report = ReportParser.new(piped_input)
exit report.exit_code
Bonjour Martin, j'utilise cela pour mes tests Ocunit, mais ma question concerne les tests d'interface utilisateur pour lesquels j'utilise l'instrument d'automatisation d'UI d'Apple. Ces tests sont écrits en JavaScript et génèrent une sortie XML.
@Mandyw Hooo, je suis désolé de ne pas avoir votre question correctement. Le code que j'ai fourni est destiné à modifier les tests Ocunit dans Jenkins / Hudson ne pour changer la sortie de script uautomation à Jenkins / Hudson. De toute façon j'espère que vous découvrirez
Peut-être que vous pouvez utiliser Ceci .
et dans Jenkins Execute Shell: P> < Pré> xxx pré>
et le rapport sera créé automatiquement dans ./ ynmsk-back / test.xml code> p> p> p>
Vous pouvez utiliser la bibliothèque Tunepjs. La bibliothèque fournit des tests qui génère un rapport XML (style JUnit). Il fonctionne avec Xcode 6. Pour le rapport XML, il suffit de fournir -x param. Vérifiez ici: http://www.tuneupjs.org/running.html P>
Même j'essaye la même chose. Avez-vous intégré toutes les étapes ensemble via Jenkins..Code Checkin -> Construire -> Exécution de vos scripts d'atomation -> récupérez le résultat du test s'il vous plaît laissez-moi savoir si vous avez essayé au-delà des choses
J'ai beaucoup cherché, et je n'ai rien trouvé. Nous avons juste quelque chose de piraté ensemble pour nos propres fins. S'il vous plaît faire quelque chose de réutilisable. Je vais l'utiliser.
Que voulez-vous dire par "le convertir en format Jenkins comprend"? Si vous voulez que Jenkins, il suffit de dire si la construction est passée ou échouée en fonction des tests, cela peut être effectué en l'analysant dans un script shell et exécutez-le comme une étape de construction. Sinon, si vous souhaitez utiliser les capacités de publication de Jenkins Signaler et obtenir un bon rapport à la fin, vous devez le convertir au style XML Junit, je pense que c'est la seule chose que Jenkins sait comment analyser