Wie zu beheben "NameError: global name 'x' is not defined" - Fehler während der Ausführung von Robot Framework testcase verwenden von benutzerdefinierten Bibliothek?
Bin ich zu sehen "NameError: global name 'x' is not defined" - Fehler während der Ausführung eines Testfalls in Robot Framework.
Folgende ist meine benutzerdefinierte Bibliothek-Datei (Modifiziert als pro Bryan Oakley Kommentare):
import re
def pass_fail_criteria():
if int(re.findall(r"NUM_FLOWS\n-+[\s\S]*?(\d+)\s*-+",x)[0]):
return "pass"
else:
return "fail"
Folgenden wird die "pass_fail.Roboter" Inhalt der Datei:
*** Settings ***
Library Selenium2Library
Library SSHLibrary
Library regexp_def.py
Suite Setup Go to gmail page
Suite Teardown Close All Browsers
*** Variables ***
${HOMEPAGE} https://www.gmail.com/intl/en/mail/help/about.html
${BROWSER} firefox
${LOGINPAGE} https://www.gmail.com/intl/en/mail/help/about.html
${FINALURL} https://mail.google.com/mail/
${FINALURL1} https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/'
${HOST} 1.1.1.1
${USERNAME} test
${PASSWORD} test
*** Test Cases ***
Login into gmail
Go to gmail page
Login Page Should Be Open
Click Signin Button
Input Username [email protected]
Input Password test@123
Submit Credentials
Inbox page should open
Check Deep Packet Inspection Stats
Open Connection ${HOST}
enable ssh logging XYZ
Login ${USERNAME} ${PASSWORD}
Write enable
Write show dpi app stats gmail on AVC/ap7532-15E8CC
${x} Read Until Regexp .*#
Pass fail Criteria
${status} pass fail criteria
should be equal ${status} pass
${result} Pass fail criteria ${x}
*** Keywords ***
Go to gmail page
Open Browser ${HOMEPAGE} ${BROWSER}
Maximize Browser Window
Login Page Should Be Open
Location Should Be ${LOGINPAGE}
Click Signin Button
Click Element id=gmail-sign-in
Input Username
[Arguments] ${username}
Input Text id=Email ${username}
Input Password
[Arguments] ${password}
Input Text id=Passwd ${password}
Submit Credentials
Click Button id=signIn
Inbox page should open
Location Should Be ${FINALURL}
Erhalte ich folgende Fehlermeldung während der Ausführung dieser Datei:
C:\Users\symbol\Desktop\Projects\gmail_stats_with_pass_fail_criteria>pybot pass_
fail.robot
==============================================================================
Pass Fail
==============================================================================
Login into gmail | PASS |
------------------------------------------------------------------------------
Check Deep Packet Inspection Stats | PASS |
------------------------------------------------------------------------------
Pass fail Criteria | FAIL |
NameError: global name 'x' is not defined
------------------------------------------------------------------------------
Pass Fail | FAIL |
3 critical tests, 2 passed, 1 failed
3 tests total, 2 passed, 1 failed
==============================================================================
Output: C:\Users\symbol\Desktop\Projects\gmail_stats_with_pass_fail_criteria\ou
tput.xml
Log: C:\Users\symbol\Desktop\Projects\gmail_stats_with_pass_fail_criteria\lo
g.html
Report: C:\Users\symbol\Desktop\Projects\gmail_stats_with_pass_fail_criteria\re
port.html
C:\Users\symbol\Desktop\Projects\gmail_stats_with_pass_fail_criteria>
Gibt es Fragen in folgenden code:
Pass fail Criteria
${status} pass fail criteria
should be equal ${status} pass
${result} Pass fail criteria ${x}
Könnten Sie mir sagen, wie dieses Problem zu beheben?
Vielen Dank im Voraus.
x
ist nicht im code definieren- Testen Sie Ihre regulären Ausdruck auf die variable
x
, die man noch nicht überall definiert. Vielleicht muss man es als argument zupass_fail_criteria(x)
? - Vielen Dank für Ihre Kommentare. Ich bin nicht immer eine Idee, wie übergeben Sie dieses als argument zu meinem testcase. Könnten Sie mir bitte sagen, wie übergibt man diese ${x} als argument für Robot framework testcase?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie mehrere Probleme, die gegen Sie arbeiten. Wie es scheint, Sie haben ein grundlegendes Missverständnis, wie die python-basiert-keywords arbeiten.
Zwei keywords mit dem gleichen Namen
Den Sie definieren und importieren der Bibliothek benannt regexp_def.py. Darin gibt es ein Schlüsselwort, "pass_fail_criteria". Roboter entfernen Sie die Unterstriche, also aus der Roboter-Perspektive, dieses Schlüsselwort ist mit "Pass /fail critiera".
In Ihrem Testfall Sie sind auch die Erstellung einer keyword-als "Pass /fail critiera". Es ist unklar, warum Sie tun, dass. Tun Sie das nicht. Entfernen Sie das Schlüsselwort, es ist unnötig.
Der Variablen "x" und "${x}"
Verwenden Sie eine variable
x
impass_fail_criteria
aber Sie haben nicht definiert. Das ist es, was der Fehler ist Ihnen zu sagen. Sie müssen, um Sie zu definieren, oder geben Sie es in. Es pass in müssen Sie einen parameter, und dann müssen Sie einen Wert für diesen parameter. Dies ist nicht anders als jede andere keyword, oder eine andere Funktion.in regexp_def.py:
(beachten Sie die zusätzlichen parameter in der definition)
In den test-Fall:
(beachten Sie das argument auf das Ende der zweiten Zeile)
Unabhängige Testfälle
Den Weg, den Sie derzeit haben, Ihre Testfälle strukturiert, definieren Sie
${x}
in einem test-Fall, und dann versucht, es in einem anderen. Ich weiß nicht, ob das Absicht war oder nicht, aber viele Leute betrachten diese schlechte test-case-design. Testfälle sollten so unabhängig wie möglich sind.Während Sie kann tun dies (mit Hilfe des built-in keyword -Set Suite-Variable), ich empfehle den Aufruf
pass fail criteria
im Testfall mit dem Namen "Check Deep-Packet-Inspection-Stats", wo${x}
definiert ist.Beispiel:
x
ist nicht definiert, und Sie sind mitx
in der folgenden Anweisung.if int(re.findall(r"NUM_FLOWS\n-+[\s\S]*?(\d+)\s*-+",x)[0]):
Pass
x
als argument an die Funktionpass_fail_criteria(x)
und verwendentry except
try
except
, und insbesondere, warum die catch-all -except
?re
ist die leere Liste, dann wird diese zu erhöhenIndexError
Ausnahme zu bekommen[0]
Element vom Ergebnis, also mit try-except.pass_fail_criteria(x)
Funktion? und was ist mit dem Wert vonx
?