lf_webpage.py: Added separate arguments for 2.4G and 5G wifi configurations, graphing fixes(WIP)

This commit is contained in:
Logan Lipke
2021-12-15 13:07:32 -08:00
parent 40986001ce
commit aae9a34cea

View File

@@ -55,27 +55,43 @@ class HttpDownload(Realm):
self.port_util = PortUtils(self.local_realm) self.port_util = PortUtils(self.local_realm)
self.http_profile.debug = _debug_on self.http_profile.debug = _debug_on
self.created_cx = {} self.created_cx = {}
self.station_list = []
self.radio = []
def set_values(self): def set_values(self):
# This method will set values according user input # This method will set values according user input
if self.bands == "5G": if self.bands == "5G":
self.radio = [self.fiveg_radio] self.radio = [self.fiveg_radio]
self.station_list = [LFUtils.portNameSeries(prefix_="fiveg_sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=self.fiveg_radio)]
elif self.bands == "2.4G": elif self.bands == "2.4G":
self.radio = [self.twog_radio] self.radio = [self.twog_radio]
self.station_list = [LFUtils.portNameSeries(prefix_="twog_sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=self.twog_radio)]
elif self.bands == "Both": elif self.bands == "Both":
self.radio = [self.fiveg_radio, self.twog_radio] self.radio = [self.fiveg_radio, self.twog_radio]
print(self.radio) print(self.radio)
self.num_sta = self.num_sta // 2 # self.num_sta = self.num_sta // 2
self.station_list = [
LFUtils.portNameSeries(prefix_="fiveg_sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=self.fiveg_radio),
LFUtils.portNameSeries(prefix_="twog_sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=self.twog_radio)
]
def precleanup(self): def precleanup(self):
self.count = 0 self.count = 0
for rad in self.radio: for rad in range(len(self.radio)):
print("radio", rad) print("radio", self.radio[rad])
if rad == self.fiveg_radio: if self.radio[rad] == self.fiveg_radio:
# select an mode # select an mode
self.station_profile.mode = 10 self.station_profile.mode = 10
self.count = self.count + 1 self.count = self.count + 1
elif rad == self.twog_radio: elif self.radio[rad] == self.twog_radio:
# select an mode # select an mode
self.station_profile.mode = 6 self.station_profile.mode = 6
self.count = self.count + 1 self.count = self.count + 1
@@ -85,24 +101,19 @@ class HttpDownload(Realm):
self.num_sta = 2 * (self.num_sta) self.num_sta = 2 * (self.num_sta)
self.station_profile.mode = 10 self.station_profile.mode = 10
self.http_profile.cleanup() self.http_profile.cleanup()
self.station_list1 = LFUtils.portNameSeries(prefix_="sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=rad)
# cleanup station list which started sta_id 20 # cleanup station list which started sta_id 20
self.station_profile.cleanup(self.station_list1, debug_=self.local_realm.debug) self.station_profile.cleanup(self.station_list[rad], debug_=self.local_realm.debug)
LFUtils.wait_until_ports_disappear(base_url=self.local_realm.lfclient_url, LFUtils.wait_until_ports_disappear(base_url=self.local_realm.lfclient_url,
port_list=self.station_list, port_list=self.station_list[rad],
debug=self.local_realm.debug) debug=self.local_realm.debug)
return return
# clean dlayer4 ftp traffic # clean dlayer4 ftp traffic
self.http_profile.cleanup() self.http_profile.cleanup()
self.station_list = LFUtils.portNameSeries(prefix_="sta", start_id_=self.sta_start_id,
end_id_=self.num_sta - 1, padding_number_=10000,
radio=rad)
# cleans stations # cleans stations
self.station_profile.cleanup(self.station_list, delay=1, debug_=self.local_realm.debug) self.station_profile.cleanup(self.station_list[rad], delay=1, debug_=self.local_realm.debug)
LFUtils.wait_until_ports_disappear(base_url=self.local_realm.lfclient_url, LFUtils.wait_until_ports_disappear(base_url=self.local_realm.lfclient_url,
port_list=self.station_list, port_list=self.station_list[rad],
debug=self.local_realm.debug) debug=self.local_realm.debug)
time.sleep(1) time.sleep(1)
print("precleanup done") print("precleanup done")
@@ -110,15 +121,16 @@ class HttpDownload(Realm):
def build(self): def build(self):
# enable http on ethernet # enable http on ethernet
self.port_util.set_http(port_name=self.local_realm.name_to_eid(self.upstream)[2], resource=1, on=True) self.port_util.set_http(port_name=self.local_realm.name_to_eid(self.upstream)[2], resource=1, on=True)
for rad in self.radio: for rad in range(len(self.radio)):
self.station_profile.use_security(self.security, self.ssid, self.password) print(self.station_list[rad])
self.station_profile.use_security(self.security[rad], self.ssid[rad], self.password[rad])
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1) self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
self.station_profile.set_command_param("set_port", "report_timer", 1500) self.station_profile.set_command_param("set_port", "report_timer", 1500)
self.station_profile.set_command_flag("set_port", "rpt_timer", 1) self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
self.station_profile.create(radio=rad, sta_names_=self.station_list, debug=self.local_realm.debug) self.station_profile.create(radio=self.radio[rad], sta_names_=self.station_list[rad], debug=self.local_realm.debug)
self.local_realm.wait_until_ports_appear(sta_list=self.station_list) self.local_realm.wait_until_ports_appear(sta_list=self.station_list[rad])
self.station_profile.admin_up() self.station_profile.admin_up()
if self.local_realm.wait_for_ip(self.station_list, timeout_sec=60): if self.local_realm.wait_for_ip(self.station_list[rad], timeout_sec=60):
self.local_realm._pass("All stations got IPs") self.local_realm._pass("All stations got IPs")
else: else:
self.local_realm._fail("Stations failed to get IPs") self.local_realm._fail("Stations failed to get IPs")
@@ -138,7 +150,6 @@ class HttpDownload(Realm):
suppress_related_commands_=None, http=True, suppress_related_commands_=None, http=True,
http_ip=ip_upstream + "/webpage.html") http_ip=ip_upstream + "/webpage.html")
if self.count == 2: if self.count == 2:
self.station_list = self.station_list1
self.station_profile.mode = 6 self.station_profile.mode = 6
print("Test Build done") print("Test Build done")
@@ -479,44 +490,60 @@ class HttpDownload(Realm):
# Section commented because graphing breaks two band report generation # Section commented because graphing breaks two band report generation
# TODO: Fix graphing bug with multiple bands being recorded # TODO: Fix graphing bug with multiple bands being recorded
# if bands == "Both":
# report.set_title("WEBPAGE DOWNLOAD TEST") num_stations = num_stations * 2
# report.set_date(date) report.set_title("WEBPAGE DOWNLOAD TEST")
# report.build_banner() report.set_date(date)
# report.set_table_title("Test Setup Information") report.build_banner()
# report.build_table_title() report.set_table_title("Test Setup Information")
# report.build_table_title()
# report.test_setup_table(value="Device under test", test_setup_data=test_setup_info)
# report.test_setup_table(value="Device under test", test_setup_data=test_setup_info)
# report.set_obj_html("Objective", "The Webpage Download Test is designed to test the performance of the
# Access Point.The goal is to check whether the webpage loading time of all the " + str( num_stations) + " report.set_obj_html("Objective", "The Webpage Download Test is designed to test the performance of the "
# clients which are downloading at the same time meets the expectation when clients connected on single radio "Access Point.The goal is to check whether the webpage loading time of all the "
# as well as dual radio") report.build_objective() report.set_obj_html("Download Time Graph", "The below + str(num_stations) +
# graph provides information about the download time taken by each client to download webpage for test "clients which are downloading at the same time meets the expectation when clients"
# duration of " + str( duration) + " min") report.build_objective() graph = self.generate_graph( "connected on single radio as well as dual radio")
# dataset=dataset, lis=lis, bands=bands) report.set_graph_image(graph) report.set_csv_filename(graph) report.build_objective()
# report.move_csv_file() report.move_graph_image() report.build_graph() report.set_obj_html("Download Rate report.set_obj_html("Download Time Graph", "The below graph provides information about the download time taken "
# Graph", "The below graph provides information about the download rate in Mbps of each client to download "by each client to download webpage for test duration of " + str(duration) + " min")
# the webpage for test duration of " + str( duration) + " min") report.build_objective() graph2 = report.build_objective()
# self.graph_2(dataset2, lis=lis, bands=bands) print("graph name {}".format(graph2)) report.set_graph_image(
# graph2) report.set_csv_filename(graph2) report.move_csv_file() report.move_graph_image() graph = self.generate_graph(dataset=dataset, lis=lis, bands=bands)
# report.build_graph() report.set_obj_html("Summary Table Description", "This Table shows you the summary report.set_graph_image(graph)
# result of Webpage Download Test as PASS or FAIL criteria. If the average time taken by " + str( report.set_csv_filename(graph)
# num_stations) + " clients to access the webpage is less than " + str( threshold_2g) + "s it's a PASS report.move_csv_file()
# criteria for 2.4 ghz clients, If the average time taken by " + "" + str( num_stations) + " clients to report.move_graph_image()
# access the webpage is less than " + str( threshold_5g) + "s it's a PASS criteria for 5 ghz clients and If report.build_graph()
# the average time taken by " + str( num_stations) + " clients to access the webpage is less than " + str( report.set_obj_html("Download Rate Graph", "The below graph provides information about the download rate in "
# threshold_both) + "s it's a PASS criteria for 2.4 ghz and 5ghz clients") "Mbps of each client to download the webpage for test duration of " + str(duration) + " min")
# report.build_objective()
# report.build_objective() graph2 = self.graph_2(dataset2, lis=lis, bands=bands)
# test_setup1 = pd.DataFrame(summary_table_value) print("graph name {}".format(graph2))
# report.set_table_dataframe(test_setup1) report.set_graph_image(graph2)
# report.build_table() report.set_csv_filename(graph2)
# report.move_csv_file()
# report.set_obj_html("Download Time Table Description", "This Table will provide you information of the report.move_graph_image()
# minimum, maximum and the average time taken by clients to download a webpage in seconds") report.build_graph()
# report.set_obj_html("Summary Table Description", "This Table shows you the summary "
# report.build_objective() "result of Webpage Download Test as PASS or FAIL criteria. If the average time taken by " +
str(num_stations) + " clients to access the webpage is less than " + str( threshold_2g) +
"s it's a PASS criteria for 2.4 ghz clients, If the average time taken by " + "" +
str( num_stations) + " clients to access the webpage is less than " + str( threshold_5g) +
"s it's a PASS criteria for 5 ghz clients and If the average time taken by " + str( num_stations) +
" clients to access the webpage is less than " + str(threshold_both) +
"s it's a PASS criteria for 2.4 ghz and 5ghz clients")
report.build_objective()
test_setup1 = pd.DataFrame(summary_table_value)
report.set_table_dataframe(test_setup1)
report.build_table()
report.set_obj_html("Download Time Table Description", "This Table will provide you information of the "
"minimum, maximum and the average time taken by clients to download a webpage in seconds")
report.build_objective()
x = [] x = []
for fcc in list(result_data.keys()): for fcc in list(result_data.keys()):
fcc_type = result_data[fcc]["min"] fcc_type = result_data[fcc]["min"]
@@ -612,8 +639,6 @@ class HttpDownload(Realm):
csv_outfile = report.file_add_path(csv_outfile) csv_outfile = report.file_add_path(csv_outfile)
print("csv output file : {}".format(csv_outfile)) print("csv output file : {}".format(csv_outfile))
exit()
test_setup = pd.DataFrame(download_table_value) test_setup = pd.DataFrame(download_table_value)
report.set_table_dataframe(test_setup) report.set_table_dataframe(test_setup)
report.build_table() report.build_table()
@@ -638,9 +663,12 @@ def main():
parser.add_argument('--num_stations', type=int, help='number of stations to create', default=1) parser.add_argument('--num_stations', type=int, help='number of stations to create', default=1)
parser.add_argument('--twog_radio', help='specify radio for 2.4G clients', default='wiphy3') parser.add_argument('--twog_radio', help='specify radio for 2.4G clients', default='wiphy3')
parser.add_argument('--fiveg_radio', help='specify radio for 5 GHz client', default='wiphy0') parser.add_argument('--fiveg_radio', help='specify radio for 5 GHz client', default='wiphy0')
parser.add_argument('--security', help='WiFi Security protocol: {open|wep|wpa2|wpa3') parser.add_argument('--twog_security', help='WiFi Security protocol: {open|wep|wpa2|wpa3} for 2.4G clients')
parser.add_argument('--ssid', help='WiFi SSID for script object to associate to') parser.add_argument('--twog_ssid', help='WiFi SSID for script object to associate for 2.4G clients')
parser.add_argument('--passwd', help='WiFi passphrase/password/key') parser.add_argument('--twog_passwd', help='WiFi passphrase/password/key for 2.4G clients')
parser.add_argument('--fiveg_security', help='WiFi Security protocol: {open|wep|wpa2|wpa3} for 5G clients')
parser.add_argument('--fiveg_ssid', help='WiFi SSID for script object to associate for 5G clients')
parser.add_argument('--fiveg_passwd', help='WiFi passphrase/password/key for 5G clients')
parser.add_argument('--target_per_ten', help='number of request per 10 minutes', default=100) parser.add_argument('--target_per_ten', help='number of request per 10 minutes', default=100)
parser.add_argument('--file_size', type=str, help='specify the size of file you want to download', default='5MB') parser.add_argument('--file_size', type=str, help='specify the size of file you want to download', default='5MB')
parser.add_argument('--bands', nargs="+", help='specify which band testing you want to run eg 5G OR 2.4G OR Both', parser.add_argument('--bands', nargs="+", help='specify which band testing you want to run eg 5G OR 2.4G OR Both',
@@ -699,10 +727,22 @@ def main():
avg_both = [] avg_both = []
for bands in args.bands: for bands in args.bands:
if bands == "2.4G":
security = [args.twog_security]
ssid = [args.twog_ssid]
passwd = [args.twog_passwd]
elif bands == "5G":
security = [args.fiveg_security]
ssid = [args.fiveg_ssid]
passwd = [args.fiveg_passwd]
elif bands == "Both":
security = [args.fiveg_security, args.twog_security]
ssid = [args.fiveg_ssid, args.twog_ssid]
passwd = [args.fiveg_passwd, args.twog_passwd]
http = HttpDownload(lfclient_host=args.mgr, lfclient_port=args.mgr_port, http = HttpDownload(lfclient_host=args.mgr, lfclient_port=args.mgr_port,
upstream=args.upstream_port, num_sta=args.num_stations, upstream=args.upstream_port, num_sta=args.num_stations,
security=args.security, security=security,
ssid=args.ssid, password=args.passwd, ssid=ssid, password=passwd,
target_per_ten=args.target_per_ten, target_per_ten=args.target_per_ten,
file_size=args.file_size, bands=bands, file_size=args.file_size, bands=bands,
twog_radio=args.twog_radio, twog_radio=args.twog_radio,
@@ -786,7 +826,7 @@ def main():
date = str(datetime.now()).split(",")[0].replace(" ", "-").split(".")[0] date = str(datetime.now()).split(",")[0].replace(" ", "-").split(".")[0]
test_setup_info = { test_setup_info = {
"DUT Name": args.ap_name, "DUT Name": args.ap_name,
"SSID": args.ssid, "SSID": ','.join(ssid),
"Test Duration": test_duration, "Test Duration": test_duration,
} }
test_input_infor = { test_input_infor = {
@@ -795,23 +835,27 @@ def main():
"Bands": args.bands, "Bands": args.bands,
"Upstream": args.upstream_port, "Upstream": args.upstream_port,
"Stations": args.num_stations, "Stations": args.num_stations,
"SSID": args.ssid, "SSID": ','.join(ssid),
"Security": args.security, "Security": ','.join(security),
"Duration": args.duration, "Duration": args.duration,
"Contact": "support@candelatech.com" "Contact": "support@candelatech.com"
} }
http1 = HttpDownload(lfclient_host=args.mgr, lfclient_port=args.mgr_port, http1 = HttpDownload(lfclient_host=args.mgr, lfclient_port=args.mgr_port,
upstream=args.upstream_port, num_sta=args.num_stations, upstream=args.upstream_port, num_sta=args.num_stations,
security=args.security, security=security,
ssid=args.ssid, password=args.passwd, ssid=ssid, password=passwd,
target_per_ten=args.target_per_ten, target_per_ten=args.target_per_ten,
file_size=args.file_size, bands=args.bands, file_size=args.file_size, bands=args.bands,
twog_radio=args.twog_radio, twog_radio=args.twog_radio,
fiveg_radio=args.fiveg_radio) fiveg_radio=args.fiveg_radio)
dataset = http1.download_time_in_sec(result_data=result_data) dataset = http1.download_time_in_sec(result_data=result_data)
lis = [] lis = []
for i in range(1, args.num_stations + 1): if bands == "Both":
lis.append(i) for i in range(1, args.num_stations*2 + 1):
lis.append(i)
else:
for i in range(1, args.num_stations + 1):
lis.append(i)
dataset2 = http1.speed_in_Mbps(result_data=result_data) dataset2 = http1.speed_in_Mbps(result_data=result_data)
data = http1.summary_calculation( data = http1.summary_calculation(