import argparse, json, os, urllib.parse
def get_all_sites():
with open("chrome/test/data/autofill/captured_sites/artifacts/testcases.json",
"r") as f:
return (site["site_name"] for site in json.loads(f.read())["tests"]
if not site.get("disabled", False))
parser = argparse.ArgumentParser(epilog="List of tests: " +
", ".join(get_all_sites()))
parser.add_argument(
"target",
help=("Build target of captured_sites_interactive_tests binary. "
"For example, Default. The binary should already exist."))
parser.add_argument("features", help="A comma-separated list of feature names.")
parser.add_argument(
"-r",
dest="histogram_regex",
help=("A regex matching the histogram names that should be dumped. If not "
"specified, the metrics of all histograms dumped."))
parser.add_argument(
"-o",
dest="output",
default="/tmp/",
help=("Directory to record the metrics into. Creates files per test, named"
" after the test case."))
parser.add_argument(
"-t",
dest="test",
help="Test case. If no test is specified, all tests are run.")
parser.add_argument("-s",
dest="silent",
action="store_true",
help="Don't print test output.")
args = parser.parse_args()
captured_site_tests = "out/%s/captured_sites_interactive_tests" % args.target
assert os.path.exists(captured_site_tests)
def run_test(site, features_enabled):
cmd = "./" + captured_site_tests
cmd += (" --gtest_filter="
"All/AutofillCapturedSitesInteractiveTest.Recipe/" + site)
cmd += " --enable-features=AutofillCapturedSiteTestsMetricsScraper"
cmd += ":output_dir/" + urllib.parse.quote(args.output, safe="")
if args.histogram_regex is not None:
cmd += "/histogram_regex/" + urllib.parse.quote(args.histogram_regex,
safe="")
if features_enabled:
cmd += "," + args.features
else:
cmd += " --disable-features=" + args.features
cmd += " --enable-pixel-output-in-tests"
cmd += " --test-launcher-timeout=10000000"
cmd += " --ui-test-action-max-timeout=10000000"
cmd += (" --vmodule=captured_sites_test_utils=2\,"
"autofill_captured_sites_interactive_uitest=1")
if args.silent:
cmd += " > /dev/null 2>&1"
os.system(cmd)
def run_tests_and_diff(site):
print("Testing %s..." % site)
def file_name(infix):
return "%s/%s%s.txt" % (args.output, site, infix)
output = file_name("")
result_enabled = file_name("_enabled")
result_disabled = file_name("_disabled")
print("Running with features enabled. Results at " + result_enabled)
run_test(site, True)
os.rename(output, result_enabled)
print("Running with features disabled. Results at " + result_disabled)
run_test(site, False)
os.rename(output, result_disabled)
print("Comparing metrics (no output means no diff)")
os.system("diff %s %s" % (result_enabled, result_disabled))
print("")
if args.test is None:
for site in get_all_sites():
run_tests_and_diff(site)
else:
run_tests_and_diff(args.test)