You can't make the script see another value for $test than test1, given the way that your script is currently written (it assigns the string test1 to the variable unconditionally, then prints it). Sourcing the script would not help. The only thing sourcing the script would do is to set the variable test to test1 in the current environment, regardless of its previous value.
You could make your script have a default value that is overridden by giving the script a command line argument.
In the simplest case, this may look like
#!/bin/sh
value=${1:-test1}
printf 'value is %s\n' "$value"
I'm avoiding to use the name test for the variable, as that is also the name of a standard utility. Not that it causes issues, but it makes the code less ambiguous to read. I'm also using /bin/sh rather than bash in the #!-line since the script does not use any bash-specific features. It would still be executable by bash though, and by ksh, yash, zsh and any other POSIX shell.
This would set the value of the variable value to whatever the first command line argument was, unless it was not provided, in which case it is set to the string test1. The ${parameter:-word} is a standard parameter substitution that is expanded to word if $parameter is an empty string or if that variable is unset.
Testing:
$ ./script.sh
value is test1
$ ./script.sh hello
value is hello
Allowing the script to take an option, -v, that takes a single option-argument:
#!/bin/sh
value=test1
while getopts 'v:' opt; do
case $opt in
v) value=$OPTARG ;;
*) echo 'error in command line parsing' >&2
exit 1
esac
done
# not needed if you're not expecting operands after the options
# on the command line:
shift "$(( OPTIND - 1 ))"
printf 'value is %s\n' "$value"
Testing that last script:
$ ./script.sh
value is test1
$ ./script.sh -v hello
value is hello