Как создать тестовый набор Selenium, написанный на Ruby? - PullRequest
3 голосов
/ 05 октября 2011

У меня есть куча тестов Selenium, написанных на Ruby. Я записываю с помощью IDE и экспортирую тесты HTML как тесты Ruby (Test :: Unit). В моем TestingProject (проект Ruby, созданный в NetBeans) я просто создаю новый файл (TestFile.rb) и копирую / вставляю записанный контент, который был экспортирован из Selenium IDE. Через некоторое время у меня есть несколько файлов, каждый из которых тестирует отдельную часть нашего приложения.

TestFile1.rb
TestFile2.rb
TestFile3.rb

В настоящее время для запуска теста у меня есть файл main.rb, и я называю эти тестовые файлы так:

#file name: main.rb
require "./FolderName/TestFile1.rb"
require "./FolderName/TestFile2.rb"
require "./FolderName/TestFile3.rb"

В ruby ​​метод require требует имя файла и выполняет его содержимое в виде кода ruby. Этот метод поддерживает список файлов, которые он уже обработал, поэтому он не запустит ни один из этих файлов более одного раза. Однако я не могу контролировать порядок файлов, когда они выполняются, и не могу перезапустить некоторые файлы, не объявив их дважды. Как мне создать реальный набор тестов для моих тестов (программно)? Пожалуйста, включите шаги. Спасибо.

PS: This: Создать JUnit TestSuite нестатическим способом мне не поможет. Я хотел бы шаги в контексте моего примера. Спасибо.

Ответы [ 3 ]

0 голосов
/ 28 октября 2012

Как насчет этого? Возьмите файлы сценариев тестирования и закажите их любым способом (в данном случае в алфавитном порядке) и просто запускайте их по одному.

scripts = DIR.entries('~/FolderName').select { |e| e =~ /.+\.rb/ }
scripts.sort.each { |s| `#{RUBY} s`}
0 голосов
/ 04 октября 2018

Так что я думаю, вы могли бы сделать что-то вроде этого:

Я предполагаю, что у каждого уже есть настройки и демонтаж, но если вы отобразите их в CSV, вероятно, можете сделать следующее

#file name: main.rb
require 'csv'

def test_case
    test_case = './FolderName/TestPlan.csv'
    descriptor = test_case.shift
    descriptor = descriptor.map { |key| key.to_sym }
    test_case.map { |test| Hash[descriptor.zip(test) ] }
end

def run
    setup
    yield
    teardown
end 

test_case.each do |test|
    run do
##someFlair
        puts "Running Test #{test[:RECORDNUM]} @ #{(Time.now.strftime("%m-%d-%Y_%H%M%S"))}"
        require test[://columnReferring"./FolderName/TestFile1.rb"//]
    end
end

это, вероятно, не лучший способ, но я думаю, что это может сработать.

Редактировать: добавили немного чутья, чтобы показать, что если вы добавите «RECORDNUM» в качестве столбца в CSV, он может сказать вам, какой тест также выполняется.

0 голосов
/ 26 октября 2011

Пока вы не найдете лучший ответ, вы можете сделать это несколько гетто, используя eval ...

def test1
  eval(File.open(File.expand_path('~/FolderName/TestFile1.rb')).read)
end

def test2
  eval(File.open(File.expand_path('~/FolderName/TestFile2.rb')).read)
end

def test3
  eval(File.open(File.expand_path('~/FolderName/TestFile3.rb')).read)
end

test1
test2
test3
test1
#etc

Как я уже сказал, это неправильный способ сделать это, но, надеюсь, когда кто-то увидит мойужасный способ сделать это, они обеспечат лучший.

...