AtCoder: Python: Automatisieren Sie Beispieltests so weit wie möglich.

Es ist mühsam, das Wettbewerbsbeispiel mit AtCoder zu kopieren, einzufügen und auszuführen, um zu überprüfen, ob es übereinstimmt. Daher möchte ich es so weit wie möglich automatisieren. Aber ich möchte einen Eckfall selbst erstellen und testen, damit ich den von mir erstellten Fall ausführen kann.

Wenn Python in Windows installiert ist, können Sie dies tun, indem Sie die folgenden Schritte ausführen.

Nachdem Sie alle Schritte zuerst ausgeführt haben, werde ich erklären, wie Sie im eigentlichen Wettbewerb testen. ① Führen Sie das Beispiel-Download-Programm aus und geben Sie den Wettbewerbsnamen ein (z. B. "abc123"). (2) Eingabe- und Ausgabebeispiel herunterladen ③ Schreiben Sie ein Programm ④ Führen Sie aus und prüfen Sie, ob das Ausgabebeispiel mit der Ausgabe übereinstimmt

Nachfolgend finden Sie eine kurze Beschreibung der Programmfunktionen. ① Erhalten Sie den eingegebenen Wettbewerbsnamen (2) Greifen Sie mit Python auf die URL des Wettbewerbsnamens zu und ziehen Sie das Eingabe- und Ausgabebeispiel aus HTML heraus. ③ Jede Ausgabe in eine txt-Datei ④ Führen Sie das Programm mit der gespeicherten txt-Datei als Argument aus (verwenden Sie Windows Bat). ⑤ Zeigen Sie die Ausgabe des Ausführungsergebnisses und das Ausgabebeispiel nebeneinander an

Die Einführungsmethode und die Verwendung werden unten beschrieben.

【Schritt 1】 An der Eingabeaufforderung pip install requests pip install BeautifulSoup So installieren Sie die Bibliothek, mit der die URL abgerufen wurde.

[Verfahren 2] Erstellen Sie Ordner mit den Namen "Samples" und "Run". (Der Ort kann überall sein)

[Verfahren 3] Erstellen Sie eine Datei mit dem Namen GetSample.py im Ordner "Samples" und fügen Sie Folgendes ein

GetSample.py


import requests,os,glob
from bs4 import BeautifulSoup

def outtxt(pro):
    res=requests.get("https://atcoder.jp/contests/"+No+"/tasks/"+No+"_"+pro)
    soup=BeautifulSoup(res.text, 'html.parser')

    source=soup.find_all("pre")
    source=[str(source) for source in source]

    sample=[]
    for i in range(1,len(source)):
        if "<var>" in source[i]:
            break
        else:
            tmp=source[i]
            tmp=tmp.replace("<pre>","")
            tmp=tmp.replace("</pre>","")
            tmp=tmp.replace("\r\n","\n")
            sample.append(tmp)

    for i in range(0,len(sample),2):
        with open("Sample_Input_"+pro.upper()+"_"+str(i//2+1)+".txt", mode='w') as f:
            f.write(sample[i])

    for i in range(1,len(sample),2):
        with open("Sample_Output_"+pro.upper()+"_"+str(i//2+1)+".txt", mode='w') as f:
            f.write(sample[i])
    
No=input()

for file in glob.glob('*.txt'):
    os.remove(file)

outtxt("a")
outtxt("b")
outtxt("c")
outtxt("d")
outtxt("e")
outtxt("f")

[Verfahren 4] Doppelklicken Sie auf GetSample.py, um es auszuführen. → Geben Sie den Wettbewerbsnamen ein, z. B. "abc123", da nicht mehr auf Eingaben gewartet wird. → Sie können txt-Dateien mit Eingabe- und Ausgabebeispielen im Ordner "Samples" erstellen.

[Verfahren 5] Erstellen Sie eine leere txt-Datei mit dem Namen "HandInput.txt" im Ordner "Ausführen".

[Verfahren 6] Erstellen Sie "Ans.py" im Ordner "Ausführen" und fügen Sie Folgendes ein

Ans.py


import io,sys,os
if len(sys.argv)>1:
    path=sys.argv[1]
else:
    os.system('cls')
    path="HandInput.txt"
try:
    with open(path) as f:
        INPUT=f.read() 
    sys.stdin = io.StringIO(INPUT)
except:
    print("Die angegebene Datei wurde nicht gefunden.")
    exit()
# --------------------------------------------------------
#Der Einreichungscode ist unten aufgeführt

[Verfahren 7] Erstellen Sie "SampleTest_A.bat" im Ordner "Run" und fügen Sie Folgendes ein (Geben Sie unter "Pfad des Beispielordners" den Pfad des Speicherorts an, an dem der Beispielordner erstellt wurde (C: \ Windows \ ... \ Samples).)

SampleText_A.bat


echo off
echo [Case1]
Ans.py "Pfad des Probenordners"\Sample_Input_A_1.txt
Geben Sie "Beispielordnerpfad" ein.\Sample_Output_A_1.txt
echo [Case2]
Ans.py "Pfad des Probenordners"\Sample_Input_A_2.txt
Geben Sie "Beispielordnerpfad" ein.\Sample_Output_A_2.txt
echo [Case3]
Ans.py "Pfad des Probenordners"\Sample_Input_A_3.txt
Geben Sie "Beispielordnerpfad" ein.\Sample_Output_A_3.txt
echo [Case4]
Ans.py "Pfad des Probenordners"\Sample_Input_A_4.txt
Geben Sie "Beispielordnerpfad" ein.\Sample_Output_A_4.txt

Erstellen Sie sampleTest_B.bat, sampleTest_C.bat, sampleTest_D.bat, sampleTest_E.bat, sampleTest_F.bat auf die gleiche Weise wie oben (schreiben Sie alle als A in der Fledermaus geschriebenen Teile in B, C, D ... )

[Verfahren 8] Erstellen Sie SampleTest.py im Ordner "Ausführen" und fügen Sie Folgendes ein. Als Einschränkung führt das Schreiben des Ordnerpfads direkt in Python zu einem Fehler. Verdoppeln Sie daher das \ im Dateipfad für den Teil "Beispielordnerpfad". (Beispiel C \ windows \ ・ ・ ・ \ Samples → C \\ windows \\ ・ ・ ・ \\ Samples)

SampleTest.py


import os,sys
os.system('cls')
pro="A"
os.system(""Pfad des Probenordners"\\SampleTest_"+pro+".bat")

Damit ist die Vorbereitung abgeschlossen.

【wie benutzt man】 Schreiben Sie zunächst den Code in den Abschnitt "Geben Sie hier den Übermittlungscode ein" von Ans.py. Setzen Sie für ein Problem "pro =" A "" in SamplesTest.py und für ein B-Problem "pro =" B "".

SamplesTest.py,Ausgabebeispiel


[Case1]
1
1      
[Case2]
0
0      
[Case3]
10
10     
[Case4]
Die angegebene Datei wurde nicht gefunden.
Die angegebene Datei wurde nicht gefunden.

Wenn Sie ein Beispiel für eine Ausgabe und eine eigene Antwort haben, sieht es so aus. Oben ist meine Antwort. Unten finden Sie ein Beispiel für eine Beispielausgabe. Wenn sie verglichen werden, reichen Sie sie ein. Wenn Sie Ihr eigenes Beispiel ausprobieren möchten, schreiben Sie die Eingabe in HandInput.txt und führen Sie Ans.py so aus, wie es ist.

Zusammenfassung,

Der Inhalt des Ordners "Ausführen" lautet wie folgt. Ans.py GetSample.py SampleTest.py HandInput.txt

Der Inhalt des Ordners "Samples" lautet wie folgt. GetSample.py SampleTest_A.bat SampleTest_B.bat SampleTest_C.bat SampleTest_D.bat SampleTest_E.bat SampleTest_F.bat "Andere Beispieleingabe (Sample_Input_A_1.txt usw.) und Ausgabe (Sample_Output_A_1.txt), wenn GetSample.py ausgeführt wird"

Greifen Sie mit GetSample.py auf die Problemseite von atcoder zu → Extrahieren Sie das Eingabe- und Ausgabebeispiel aus der HTML-Datei und schreiben Sie in die Textdatei Wenn bei der Ausführung von Ans.py ein Argument vorhanden ist, wird es als Eingabe akzeptiert, andernfalls wird HandInput.txt als Eingabe akzeptiert. SampleTest_A.bat usw. ist eine Fledermaus, die ausgeführt wird, indem die von GetSample.py ausgegebene Textdatei als Argument an Ans.py übergeben wird. SampleTest.py ist ein Programm, das nur SampleTest_A.bat usw. ausführt. (Sie können testen, indem Sie bat direkt ohne schlagen, aber ich habe es nur gemacht, weil ich alles auf VScode machen wollte.)

Recommended Posts

AtCoder: Python: Automatisieren Sie Beispieltests so weit wie möglich.
Automatische Übermittlung von AtCoder (Python)
Automatisieren Sie Python-Tests mit CircleCI
AtCoder: Python: Papa der Beispieltest.
Automatisiert die Erstellung von AtCoder-Verzeichnissen, das Testen von Beispielfällen und das Senden. atcoder-cli und online-Judge-Tools
atCoder 173 Python
Finden Sie in Python Primzahlen mit einem möglichst kurzen Code
Verwenden Sie get so viel wie möglich für Referenzen vom Typ Wörterbuch
AtCoder ABC 174 Python
Python-Abschlussbeispiel
AtCoder ABC 175 Python
Automatisieren Sie UI-Tests mit Selenium API | Crawlen von Websites mit Python
So führen Sie Python unter Windows aus, ohne die Umgebung so stark wie möglich zu verschmutzen (Scoop Edition)