Pracuję nad zautomatyzowaniem scenariusza Od końca do końca przy użyciu Mocha. Mam punkt końcowy adresu URL, który ma być odpytany, aż do uzyskania określonej wartości w wynikowej odpowiedzi. Czy jest jakiś sposób to zrobić?Odpytywanie adresu URL do momentu ustawienia określonej wartości w odpowiedzi JSON: Mokka, testowanie integracyjne
Odpowiedz
W ten sposób udało mi się zrobić to z WebdriverIO i Mocha
describe("wait for value in content of page",() => {
it("should be able to wait to value in url",() => {
var max_seconds_to_wait = 10;
var seconds_counter = 0;
var should_continue = true;
while (should_continue) {
browser.url('http://your.url.com');
var response = JSON.parse(browser.getText("body"));
console.log(response)
if (response == 'something') {
should_continue = false;
}
browser.pause(1000);
seconds_counter++;
if (seconds_counter > max_seconds_to_wait) {
throw 'Waiting for json from url timeout error';
}
}
});
});
Tęskniłeś kilka rzeczy: 1) sprawdź odpowiedź ma oczekiwaną wartość 2) wyrzuć błąd w czasie max_seconds_to_wait 3) zmień domyślny limit czasu tylko dla tego testu. Pomysł użycia WebdriverIO jest bardzo fajny! – galkin
Dziękuję za komentarze, zredagowałem odpowiedź. Myślę, że lepszym sposobem na to jest stworzenie funkcji eksportu, która nie znajduje się w teście, jak funkcja użyteczności, a następnie łatwiej będzie przekazać tej funkcji niezbędny time_to_wait. – satlosb
Przykład z request i podejście callback:
:const request = require('request');
describe('example',() => {
it('polling', function (done) {
this.timeout(5000);
let attemptsLeft = 10;
const expectedValue = '42';
const delayBetweenRequest = 100;
function check() {
request('http://www.google.com', (error, response, body) => {
if (body === expectedValue) return done();
attemptsLeft -= 1;
if (!attemptsLeft) return done(new Error('All attempts used'));
setTimeout(check, delayBetweenRequest);
});
}
check();
});
});
Przykład z got i async/podejście czekają
const utils = require('util');
const got = require('got');
const wait = utils.promisify(setTimeout);
describe('example',() => {
it('polling', async function (done) {
this.timeout(5000);
const expectedValue = '42';
const delayBetweenRequest = 100;
for (let attemptsLeft = 10; attemptsLeft; attemptsLeft -= 1) {
const resp = await got.get('http://www.google.com');
if (resp.body === expectedValue) return done();
await wait(delayBetweenRequest);
}
done(new Error('All attempts used'));
});
});
sprawdź ten jeden https://github.com/ilikebits/gallop –
Jak zapewnić autoryzację dla żądania GET, a także otrzymuję TypeError: Nie można odczytać właściwości "subscribe" o niezdefiniowanym błędzie –
czy znasz programowanie gniazda z węzłem? – Salman